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

C语言基础:指针内存占用与存储位置的技术疑问

关于C语言指针内存占用与存储位置的解答

嘿,很高兴帮你理清这个C语言基础里的常见疑问!咱们一个个来拆解你的问题:

1. 存储指针是否比它指向的字节占用更多内存?

答案是完全有可能,而且在64位系统里这是很普遍的情况。

指针的内存大小只由你的系统架构决定:

  • 32位系统中,指针通常占4字节(32位)
  • 64位系统中,指针通常占8字节(64位)

而它指向的数据的大小,是由数据的类型决定的——比如char类型占1字节,int通常占4字节,double占8字节。所以当指针指向一个比自身尺寸小的数据类型时(比如你例子里的64位指针指向char),指针确实会占用更多内存空间。

2. 指针的值存储在何处?它是否比指向的内容占用更多空间?

指针本身就是一个变量,所以它的存储位置和普通变量一样:

  • 如果是函数里的局部指针,会存在栈内存中
  • 如果是用malloc等方式动态分配的指针变量,会存在堆内存中
  • 如果是全局/静态指针,会存在全局/静态存储区

拿你给出的代码示例来说:

char data = 10;
char* charPointer = &data;

这里data是局部char变量,存在栈上;charPointer同样是局部变量,也存在栈上,它存储的是data的内存地址(64位系统下是8字节的数值)。

在64位系统中,charPointer占用8字节,而data只占用1字节——所以确实指针比它指向的数据占用了更多空间。这是完全正常的,因为指针的核心作用是记录内存地址,地址的长度由系统架构决定,和它指向的数据的大小没有关系。

另外补充个小知识点:不管指针指向什么类型,它的大小都是固定的(由系统架构决定)。比如char*、int*、double*在64位系统上都是8字节,不会因为指向的类型大小不同而变化。

内容的提问来源于stack exchange,提问作者John Issa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:30:58