int ch[10]={1,};
int* te=&ch[0];
printf("%d\n",te[-1]);
te++;
printf("%d\n",te[-1]);
第一次打印和第二次打印的值是否一致?
对于这个问题,首先要分析te指针指向的是ch这个内存块的首地址,所以对于te[-1]来说,由于-1这个数组值不存在,所以其内容应该是随机的。当te++,te指针指向的地址就变成当前首地址的下一个,此时te[-1]的地址实际上就变成了首地址,所以打印的结果应该为1。(te-1)++实际上就是te。
本文解析了一个关于指针运算的问题:初始化一个整型数组并利用指针访问数组元素,特别是越界访问的情况。通过分析指针指向数组首地址时,访问te[-1]的随机性及其变化后的具体值。

被折叠的 条评论
为什么被折叠?



