鱼C论坛

 找回密码
 立即注册
查看: 785|回复: 5

关于求指针地址的问题

[复制链接]
发表于 2024-2-4 20:01:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>

int main()
{
        char a = 'F';
        int f = 3;

        char *pa = &a;
        int *pb = &f;

        printf("a = %c\n",*pa);
        printf("f = %d\n",*pb);

        *pa = 'C';
        *pb += 1;

        printf("the addr of a is:%p\n",&pa);    //在这边
        printf("the addr of b is:%p\n",&pb);

        return 0;
}

老哥们注释(注释是后加的)那边我在读取指针变量的地址是突发奇想加了个&取地址符号结果有点出乎意料
这是没有加&符号的:
the addr of a is:0xbfcf57e7
the addr of b is:0xbfcf57e0
这是加了&符号的:
the addr of a is:0xbfebd554
the addr of b is:0xbfebd550

这是为什么呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-2-4 20:01:18 | 显示全部楼层
在打印指针地址时,如果你使用了`&`符号来取地址,那么实际上打印的是指针变量本身的地址,而不是指针所指向的变量的地址。

对于`pa`和`pb`这两个指针变量,它们分别存储了`a`和`f`的地址。因此,当你打印`&pa`和`&pb`时,实际上输出的是`pa`和`pb`本身的地址。

所以,在输出指针变量的地址时,不需要使用额外的`&`符号,正确的写法应该是:
printf("the addr of a is:%p\n", pa);
printf("the addr of b is:%p\n", pb);

这样就可以正确地输出`a`和`f`的地址了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-4 20:07:40 | 显示全部楼层
&pa 和 &pb 分别是指针变量 pa 和 pb 的内存地址
不加&时输出的pa,pb是他们储存的数的地址
加&的事后输出的是他们自己的地址

你可以想象成有两个方块为pa,pb
他们分别储存了另外两个方块的位置
直接输出pa,pb时输出的是他们存的东西
输出&pa, &pb输出的是他们自己的位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2024-2-4 20:09:13 | 显示全部楼层
给个最佳答案呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-5 15:06:51 | 显示全部楼层
详细说明一下问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-6 22:39:16 | 显示全部楼层
实际上就是指向指针的指针呀,跟着小甲鱼后面就1学到啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 10:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表