有关于C语言的一道小问题,有关printf函数的的原理

下面的程序输出结果是多少?

#include<stdio.h>

main()
{
    int b = 3;
    int arr[] = {6,7,8,9,10};
    int *ptr = arr;
    *(ptr++)+=123;              
        printf("%d,%d\n",*ptr,*(++ptr));  
}

还有就是为何我Mac下的gcc和Linux的gcc出现的结果不一样???

  • 3. Side Effect与Sequence Point
  • C语言未定义行为一览 – SegmentFault
  • int i=1; 求 ++i*++i 的值。用c/c++为什么会是9,而java却是6 – SegmentFault

简单地说,就是一个由其定义行为不确定的程序在不同平台了产生不同的结果是很正常的事情。应该避免这种未定义的行为。如果你使用 gcc 或者 clang,请加上 -O2 -Wall 命令行参数。

PS: 这么短的程序里竟然有两处行为未定义的地方……

printf(“%d,%d\n”,ptr,(++ptr));
先执行ptr,还是先执行(++ptr),取决与程序指定的调用惯例
调用惯例约定了函数参数从左至右压栈,还是从右至左压栈

  • mysql 多个字段重复的查询语句
  • opencv python 怎么配置 ?请大神指点一下
  • 如何打包合并静态库
  • C++创建二维指针问题
  • java网络编程入门程序问题?
  • 360新版本技术有突破么?
  • 开始学习编程学习c开始还是java?
  • 如何鉴定一个IP地址是否为代理IP或VPN IP
  • 如果要创建8*14个边框,该怎么写。
  • C++栈的开发问题
  • 如何用C#+WPF做出类似Visual Studio的UI