c语言操作符 “++”另类行为
正常情况下,我们使用++
int a = 1;
a++;
printf(“%d”,a); // 2;
很简单没什么好说的。
#include <stdio.h>int
main(){int a = 2 ;
int *p = &a ;
int b[5][10] = {4} ;
int (*q)[10] = b ;
printf("p1:%d,p2:%d,*p=%d",p++,p);
printf("\n");
printf("ap1:%d,ap2:%d",q++,q);
}
第一个输出两个数应该相差4,我的是,p1:-1077032260 p2:-1077032256
第二个输出应该相差40,我的是,ap1:1077032468 ap2:-1077032428
p与q都是指针,它的值是它所指向的数据在内存中的地址。
它们所指向的数据都有自己的数据类型,这个数据类型可以看作是一个模子,int的模子是4Bit大。
对指向某种数据类型的指针进行操(i++, --i, 取数据,存数据)作实际上是使用这种数据类型的模子作为基本单位对指针进行操作。
把指针进行++操作,实际上是使用指向这种数据类型的指针去获得下一个相同数据类型的数据在内存中地址,地址的偏移是要根据模子的大小决定的。
指针的值(也就是下一个数据的内存地址)就会加上这种数据类型(模子)的大小。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。