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

为何C语言中可将int指针信息存入int变量?指针底层存什么?

关于C语言指针与int变量的两个问题

先看你给出的代码:

#include <stdio.h>
int main()
{
    int v1, v2, *p;
    p = &v1;
    v2 = &v1;
    printf("%d\t%d\n",p,v2);
    printf("%d\t%d\n",sizeof(v2),sizeof(p));
    return 0;
}

问题1:8字节指针为何能存入4字节int变量?

这不是合法操作,属于未定义行为:

  • 在64位系统中,指针占8字节,int占4字节。把&v1(8字节地址)赋值给v2(4字节int)时,会直接截断地址的高4字节,只保留低4字节存入v2。
  • 如果v1的地址高4字节不为0,v2里存的就是不完整的错误地址。编译器可能不会报错,但这种写法完全不符合C标准,后续用v2做任何地址相关操作都会引发不可预料的问题。

问题2:指针变量底层仅存储内存地址吗?

在x86、x86_64、ARM等绝大多数通用系统架构中,指针变量只存储目标变量的内存地址,没有额外附加内容:

  • 指针的大小由系统地址总线宽度决定:32位系统地址总线是32位,指针占4字节;64位系统地址总线是64位,指针占8字节,刚好能完整存储一个内存地址。
  • 极少数特殊架构可能有例外,但日常开发接触的通用平台里,指针就是单纯的地址值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:45:26