在C语言中+1到底是加几?
在C语言中+1到底是加几?
下面仅仅是我个人的想法,如有误区,求大佬更正,不胜感激(嘻嘻😊)
最近在做题时遇见了以下问题,以及在遇见这些问题时我的思考
1.问题如下:
c语言代码:
#include<stdio.h>
int main(int argc, char *argv[])
{
int a[2][2];
printf("&a = %p &a[0] = %p &a[0][0] = %p
", &a, &a[0], &a[0][0]);
printf("&a+1 = %p &a[0]+1 = %p &a[0][0]+1= %p
", &a+1, &a[0]+1, &a[0][0]+1);
return 0;
}
结果如下: … 提问: 代码中a不就是代表着a数组的首地址嘛,那么&a+1为什么不等于&a[0][0]+1???
2.解答如下:
在c语言中:“+1”就是偏移量问题:一个类型为T的指针的移动,是以sizeof(T)为移动单位。
这里的&a+1相当于:&a+sizeof(a); 这里的&a[0][0]+1相当于:&a[0][0]+sizeof(a[0][0]);
3.思考: 在c语言中+1可能并不是简单的+1,需要谨慎的思考,才能避免这些错误。
那么如果是+2尼? … …
