理解指针变量递增

问题描述:

在阅读关于指针我发现了一个指针变量用于指示这样的数组:理解指针变量递增

char* chrArray; 
int* intArray; 

该后,我发现在代码中使用charArray++intArray++以指示charArray下一个元素和intArray。但到目前为止,我知道C中的char是1个字节,而数组中的int是4个字节。所以我不明白增量操作符在这里的表现如何。任何人都可以请解释它。

+0

请参阅[指针算术](http://*.com/questions/394767/pointer-arithmetic) – 2015-04-03 08:11:29

+1

没有哪种语言比C(汇编...)更能控制内存。有了这个伟大的控制权,我们有责任知道在任何给定位置存储在内存中的内容以及如何处理该值。指针只是变量,而不是像正常值那样保持你的想法,指针将内存地址保存到值的存储位置。当你像上面那样声明指针时,它们只会为你指定一个地址。正常的例子是'int n = 5; int * p =&n;'这里'p'保存存储值'5'的地址'n'。 – 2015-04-03 08:28:09

这是由知道指针类型的编译器处理的,因此可以通过相关大小递增其存储的地址,无论它是char,int还是任何其他类型。

+0

这意味着字符增量操作符设置指针指示内存中的下一个字节?并为整数它设置4个字节后? – sharif1981 2015-04-03 08:12:36

+0

一般是的。但是,理解指针的++运算符语义是通过指定项目的大小来增加地址是很重要的。这是在编译程序期间由编译器处理的。 – 2015-04-03 08:14:41

+0

非常感谢。现在它是有道理的。 – sharif1981 2015-04-03 08:15:45

作为每C11标准文档,章6.5.2.5,后缀增量和减量运算

后缀的结果++运算符是操作数的值。作为副作用,操作数对象的值将增加(即,向其添加适当类型的值012)。

所以,当你使用后缀递增运算符,你不加入任何特定值,而是你addding 值1的操作数的类型上,操作者是用过的。


现在对于你的榜样,

  • chrArraychar *类型。因此,如果我们做chrArray++,那么char [sizeof(char),即1]的值将作为结果添加到chrArray

  • OTOH,intArray的类型是int *。因此,如果我们执行intArray++,那么int [sizeof(int),即4在32位平台上的值可能有所不同]的值将作为结果添加到intArray

基本上,在任何类型的指向下一个元素的指针变量一个后缀增量操作符(提供的,有效的访问),该类型的。