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

C语言中局部变量与指针变量相加结果为何是6而非3?

C语言指针运算疑惑:a = a+p结果为何是6而非3?

我是C语言初学者,自主练习代码时遇到算法问题。以下是我的代码及运行输出,疑惑为何执行a = a+p后结果为6而非3,希望得到解答。

#include <stdio.h>

int main() {
   
   int a = 1;
   printf("value of a = %d\n", a);
   printf("address of a = %u\n", &a);
   
   int *p;
   printf("value of p = %d\n", p);
   
   p = 2;
   printf("value of p = %d\n", p);
   
   a = a+p;
   printf("value of addition =%d\n", a);
  
    return 0;
}

输出

value of a = 1
address of a = 947268620
value of p = 947268880
value of p = 2
value of addition =6


核心原因是指针算术运算的规则:

  • p是int*类型的指针变量,你直接将整数2赋值给它时,p实际代表内存地址为2的指针(注:直接给指针赋值整数属于不规范操作,正确写法应为p = (int*)2;,且该地址通常无效,属于未定义行为)。
  • 执行a = a+p时,C语言会按照指针算术规则处理:指针与整数相加,结果是指针地址加上「整数 × 指针指向类型的字节大小」。假设你的系统中sizeof(int)=4(大部分现代系统都是如此),那么p + a的实际计算是2 + 1×4 = 6。
  • 最后这个地址值会被隐式转换为int类型赋值给a,所以最终a的结果是6,而非你预期的1+2=3。

另外补充:代码中直接打印未初始化的指针p的值,这也是未定义行为,输出的是随机内存值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:15:44