C语言 指针变量的大小与指针类型

一、指针变量的大小

例如:

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操作的时候,一次跳过几个字节 (指针的步长)。 

猜你喜欢

转载自blog.csdn.net/2301_76445610/article/details/132187918