C语言中的指针加减偏移量

 

首先看一段程序:

 

输出结果为:

2, 5

 

第一个结果好说,a+1后指针指向了数组中的‘2’。 而第二个为什么输出‘5’呢。 原理是c语言中的指针加减后,会根据指针的类型采用不同的偏移量。

 

比如, int* a;     int* b = a+1;  则 b - a = sizeof(int)

 

char* a; char* b = a+1; 则b - a = sizeof (char)  

 

 

将上述程序改写如下,更容易认识其本质

 

 

其中只是引入了一个中间变量 ptr指针, ptr指针的类型是 指向数组长度为5的指针, 所以 ptr + 1  其实是加了sizeof(a)的字节量,

ptr+1后指向了从a后面,即a开始数第6个字节。

 

注意指向数组指针的写法。括号不能丢。

 

 

 

int a[n], 则a是一个数组类型,而不是int型了,要注意正确对待。

 

 

a与&a的值一样,但意义不一样, a+1的偏移量为一个int,相当于&a[0], &a+1的偏移量为真个数组。是数组类型的指针。


版权声明:本文为dobest9014原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。