开发平台(Platform): (Ex: Win10, Linux, ...)
macOS
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VS code
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
无
问题(Question):
求输出
喂入的资料(Input):
无
预期的正确结果(Expected Output):
不知道
错误结果(Wrong Output):
没有错误结果
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
https://pastebin.com/J3ysYEgV
int main(){
int a[5] = {1, 2, 3, 4, 5};
int *p = (int *)(&a + 1);
printf("%d, %d",*(a+1), (*p-1));
return 0;
}
补充说明(Supplement):
最近在读C,看到这一题,
熊熊看看不出端倪,于是喂进去试跑看看,
输出是2, 0,
但上网找,大家都说答案是2,5
第一个是2没什么争议,有点不太懂为什么第二个输出是5,我比较认同我的编译器XD
我对int *p = (int *)(&a+1);的理解是这样:取得a这个地址再加1内的值,
而1为int,所以应该是加上4个bytes,
不过,a本身就是一个指标,&a不就是指标的指标吗?但是没有特别去宣告这个指标的指标
所以应该会不合法,因此输出为0合情合理,
但网络上的答案都说是5,
解释是:可把a[5]当成一个二维阵列,只存放一个element,
意即:int a可看成{{1,2,3,4,5}}
所以&a是这个 ^
{{1,2,3,4,5}}
而&a+1是这个 ^
因为没有第二个element,所以答案是5
也点摸不著头绪啊!!