在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尼? … …

经验分享 程序员 微信小程序 职场和发展