所有的指针变量占用的内存大小是相同的,这个内存中保存的不是数据的值,而是指针的值,指针的值是一个内存地址,也就是指针指向数据的首地址,根据这个地址只能得到指针指向数据的开始位置,并不知道这是什么类型的数据,所以指针的类型就决定了数据的类型
指针变量所需要的存储空间的确是相同的。它都需要最高字长的存储空间。
但在指针指向不同类型的数据类型空间时,指针操作是不同的,见下示例代码:
unsigned char * ptrChar;
unsigned int * ptrInt;
ptrChar=(unsigned char *)0x0000;
ptrInt=(unsigned int *)0x0000;
ptrChar++;
ptrInt++;
最后两个指针++操作,看代码都是用的加加操作符,但实际上,指向无符号char型数据的指针,在加加操作后,ptrChar中的值是0x0001,因为每个无符号char只占用一个字节,而ptrInt在加加操作后,其值是0x0004,因为每个整型占用4个字节。
所有指针 都是占用4个字节这个是没错
但是为什么不能用呢?给你举个例子。
int a = 0x00000FFF;
char *p = &a;
printf("%d\n", *p);
结果是255。也就是说 每一个类型的指针所取的bit长度不一样!char类型占用8bit, int 32bit,short 16bit。
上边这个例子不好
由于 是有符号的 所以255 打出来是-1
改一下
int a = 0x00000F0F;
这样的话就是15了
这是C语言的语法要求,因为不同类型的指针,在作+-运算时,它的步长是不一样的。
你是什么指针?很多语言都有指针的。
指针存储的是数据的首地址,它指向和它同一类型的数据。跟占用多少空间没关系。用int型指向int型,double指向double型,等等。如果不匹配会发生错误。