所以,我在计算机考试中得到了这个(C gcc-4.9.2): 以下语句会给出相同的输出吗?假设a是一个数组。
a) printf("%d", a + 1);
b) printf("%d", &a + 1);
c) printf("%d", a[0] + 1);
最佳答案
Will the following statements give the same output?
简短回答:否。
详细信息如下:
假设a
定义为
int a[N];
与
N >= 1
并且至少 a
的第一个元素已正确初始化(情况 3. 取决于后一个前提条件)。
printf("%d", a + 1);
a + 1
计算出具有值的指针
((char*) &a[0]) + 1 * sizeof a[0]
使用
%d
打印它会调用 UB。任何事情都可能发生/被打印。使用%p
打印void
指针的值。使用(void*)
转换传递的指针。printf("%d", &a + 1);
&a + 1
计算出具有值的指针
((char*) &a) + 1 * sizeof a
(后一个值与 1. if
N > 1
的结果不同。)使用
%d
打印它会调用 UB。任何事情都可能发生/被打印。使用%p
打印void
指针的值。使用(void*)
转换传递的指针。printf("%d", a[0] + 1);
将打印数组第一个元素初始化时的一些整数值 + 1。
关于c - 调用数组数据类型进行打印的不同方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36104511/