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

swap函数内printf输出内存地址而非变量值的原因咨询

swap函数内printf输出内存地址而非变量值的原因咨询

看起来你遇到了C语言指针使用里一个非常典型的小误区,我来帮你把逻辑理清楚~

核心问题:指针变量的本质

在你的swap函数中,参数x和y被定义为指针类型(int*),它们的作用是存储你从main函数传入的&x和&y——也就是main里普通变量x和y的内存地址,而不是变量的实际值。

你在swap函数的printf语句中直接传入了x和y,再配合%d格式符打印,实际上是把指针变量存储的内存地址(以十进制整数形式展示,也就是你看到的6422300、6422296这类数字)当成普通整数输出了,而不是你预期的、指针指向的变量的实际值。

如何在swap函数中打印正确的变量值

如果想要在swap函数里打印交换后变量的真实值,你需要使用**解引用操作符***来访问指针指向的内存空间里的内容,把printf语句修改为:

printf("The value of x and y inside the function is x = %d and y = %d", *x, *y);

这样就能输出交换后的3和2,和main函数里的打印结果对应上了。

为什么你的交换逻辑是生效的?

从第二个代码示例的输出能看到,main函数里的x和y成功交换为3和2,这说明你的交换逻辑是完全正确的:你在swap函数中用*x和*y完成了对main函数中变量的直接修改——这正是指针的核心作用,通过地址间接操作目标变量。只是打印指针本身的时候,没有用到解引用,才输出了地址值。

额外补充:规范打印指针地址

如果确实想要打印指针存储的地址,标准的做法是使用%p格式符(输出十六进制的地址形式),而不是%d,比如:

printf("The address stored in x and y inside the function is x = %p and y = %p", x, y);

这样会输出更符合内存地址规范的形式,比如0x7ffeefbff5ac这类格式。

备注:内容来源于stack exchange,提问作者Manash JB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 11:24:34