下面的程序输出结果是多少?
#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出现的结果不一样???
下面的程序输出结果是多少?
#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出现的结果不一样???
printf("%d,%d\n",ptr,(++ptr));
先执行ptr,还是先执行(++ptr),取决与程序指定的调用惯例
调用惯例约定了函数参数从左至右压栈,还是从右至左压栈
1 回答1k 阅读✓ 已解决
3 回答913 阅读
1 回答1.4k 阅读
1 回答1.1k 阅读
1 回答919 阅读
868 阅读
813 阅读
简单地说,就是一个由其定义行为不确定的程序在不同平台了产生不同的结果是很正常的事情。应该避免这种未定义的行为。如果你使用 gcc 或者 clang,请加上
-O2 -Wall
命令行参数。PS: 这么短的程序里竟然有两处行为未定义的地方……