一、指针变量的大小
例如:int main()
{int num = 10;int* p = #char ch = 'w';char* pc = &ch;printf("%d\n",sizeof(p));printf("%d\n",sizeof(pc));return 0;
}答案分别是 4 和 4
指针变量中存储的是地址,而非前缀类型下的元素,所以并不存在不同类型的指针变量,所表示的字节数不同。
指针变量大小取决与地址的大小,取决于地址是32位的二进制数位还是64位的二进制数位。
在x86的环境下,地址表示的是32位的0或1组成的二进制数位,所以指针变量是4个字节,而在x64的环境下,地址表示的是64位的0或1组成的二进制数位,所以指针变量8个字节。
结论:指针变量并不取决于类型的大小,x86的指针变量大小是4字节,x64的指针变量大小是8字节。
二、指针类型
printf("%zd\n",sizeof(char*));printf("%zd\n",sizeof(int*));printf("%zd\n",sizeof(short*));printf("%zd\n",sizeof(long*));printf("%zd\n",sizeof(double*));printf("%zd\n",sizeof(float*));以上结果是一样的
通过比对,指针类型的大小,并不取决类型的大小,而是和指针变量一样,取决与计算机运算的环境。
而指针类型真正的作用是:
需要修改指针变量指向的内容时,可访问修改内容多少字节数的权限。
指针类型决定了指针在解引用操作时的权限,也就是一次解引用访问几个字节。
结论:char类型的指针解引用访问1个字节,int类型的指针解引用访问4个字节。
同时,也表明了,当进行指针变量+整数 运算时,所需要跳过的字节数的不同。
例如,int类型的指针变量在+1的过程中,所需要跳过四个字节抵达自己的所在地址。
而 char类型的指针变量在+1的过程中,只需要跳过一个字节抵达自己所在的地址。
结论:指针类型决定了,指针进行+1/-1操作的时候,一次跳过几个字节 (指针的步长)。