You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中指针变量的大小及系统差异问题

C语言中指针变量的大小及系统差异问题

嘿,这个问题问到点子上了,很多刚学指针的朋友都会被这个点绕晕,我来给你掰扯清楚~

首先核心结论:指针变量的大小只取决于你的系统架构(也就是CPU的地址总线宽度),和它指向的变量类型半毛钱关系都没有!

为啥呢?因为指针的本质就是存储内存单元的地址,不管你指向的是占2字节的short、4字节的int还是8字节的double,地址本身的长度只看系统能支持多大的寻址范围:

  • 比如常见的64位笔记本/PC,地址总线是64位,所以指针大小就是8字节(1字节=8位,64位=8字节);
  • 而那些小型嵌入式控制器,比如8位单片机,地址总线可能只有16位,那指针大小就是2字节;要是更老的32位嵌入式系统,指针就是4字节。

所以回到你的问题:笔记本(一般64位)和嵌入式控制器(多为32位/16位/8位)的指针大小肯定不一样,完全跟着系统的寻址能力走。

咱们再结合你给出的代码来验证:

#include <stdio.h>
int main(void){
    short int a = 9;
    short int *p1=&a;
    double b = 10;
    double *p2=&b;
    printf("Size of integer = %d\n",sizeof(*p1));
    printf("Size of double = %d\n",sizeof(*p2));
    printf("Size of integer pointer = %d\n",sizeof(p1));
    printf("Size of double pointer = %d\n",sizeof(p2));
    printf("Value of integer pointer = %x\n",p1);
    printf("Value of double pointer = %x", p2);
}

如果在64位系统上运行,输出会是这样:

Size of integer = 2
Size of double = 8
Size of integer pointer = 8
Size of double pointer = 8
Value of integer pointer = 7ffee3b5aabc
Value of double pointer = 7ffee3b5aab0

咱们拆解下输出:

  • sizeof(*p1)取的是指针指向的变量a的大小,short int占2字节,所以输出2;
  • sizeof(*p2)是double类型的大小,8字节;
  • 重点看sizeof(p1)和sizeof(p2),都是8字节——这就印证了咱们的结论:不管指针指向什么类型,同一系统下指针大小完全相同。

要是把这段代码放到一个32位的嵌入式系统上跑,那两个指针的大小就会变成4字节,指向的变量大小还是2和8,不会变。

备注:内容来源于stack exchange,提问作者Deep Vinod Lad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 08:28:12