首先看一段程序:
输出结果为:
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的偏移量为真个数组。是数组类型的指针。
本文通过一个具体的C语言程序示例,详细解释了指针加减运算的原理及其背后涉及的不同偏移量概念。文章重点说明了如何理解指针指向不同类型数据时的行为差异,并通过代码改写进一步阐述了数组指针与指向数组的指针的区别。
1342

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



