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
相关产品推荐
相关产品推荐

