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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值