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, 取数据,存数据)作实际上是使用这种数据类型的模子作为基本单位对指针进行操作。

把指针进行++操作,实际上是使用指向这种数据类型的指针去获得下一个相同数据类型的数据在内存中地址,地址的偏移是要根据模子的大小决定的。

指针的值(也就是下一个数据的内存地址)就会加上这种数据类型(模子)的大小。

上一篇:转:深入学习Oracle分区表及分区索引


下一篇:Eclipse下设置github开发环境