1.指针是什么?
指针是内存中一个最小的单元编号,也就是地址(一个内存单元的大小是一个字节)
int a = 10; //整型是四个字节,char一个字节占用四个字节的空间 对a取地址是a的首地址
int* pa = &a; //pa是一个指针变量,是用来存放地址的
指针的字节大小指针的字节大小是根据计算机的体系结构来决定的。在32位体系结构中,指针的大小通常为4个字节,而在64位体系结构中,指针的大小通常为8个字节。
如何编码
32位机器上,给32根地址线,假设每根地址线寻址时产生高电压或低电压(1或0)
00000000000000000000000000000000
每八个0代表8个bit位,也就是1字节。
2的32次方个地址
总结(在32号位的平台上)
-
指针变量使用开存放地址的,,地址是用来标识唯一一个地址空间的
-
如果在一个32个01组成而二进制序列,那地址就得用4个字节的空间来存储,所以一个指针变量的大小就是4个字节。
2.指针和指针的类型
X86 -32位的环境
X64 -64位的环境
指针在32位机器上都是4字节,那么区分指针的意义?
指针类型的意义
int a = 0x11223344; //0x表示16进制在16进制中每一个数字都占用4个bit //原因对于16进制中比如f的表示 1111,所以都占用四个bit //16进制的地址改为2进制00010001001000100011001101000100(四个字节) int* pa = &a; *pa = 0; //a由 44 33 22 11 被修改为00 00 00 00 char* pc = &a; *pc = 0; //a由 44 33 22 11 被修改为00 33 22 11
结论**1**:
-
指针类型决定了指针在被解引用的时候访问几个字节
-
int* 指针,解引用访问4个字节
-
char*指针,解引用访问1个字节;
int a = 0x11223344;
int* pa = &a;
char* pc =(char*)&a;
printf("pa = %p\n", pa);
printf("pa+1 = %p\n", pa+1);
printf("pc = %p\n", pc);
printf("pc+1 = %p\n", pc+1);
结论2
-
在这里可以看出对于指针类型决定了指针在+-1操作时,跳过的字节数 比如对于int*+1时跳过4个字节 char*+1时跳过1个字节
-
决定了指针的步长