努力的修垒 发表于 2024-2-4 20:01:02

关于求指针地址的问题

#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

这是为什么呢?{:10_254:}

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

学习编程中的Ben 发表于 2024-2-4 20:07:40

&pa 和 &pb 分别是指针变量 pa 和 pb 的内存地址
不加&时输出的pa,pb是他们储存的数的地址
加&的事后输出的是他们自己的地址

你可以想象成有两个方块为pa,pb
他们分别储存了另外两个方块的位置
直接输出pa,pb时输出的是他们存的东西
输出&pa, &pb输出的是他们自己的位置

学习编程中的Ben 发表于 2024-2-4 20:09:13

给个最佳答案呗

tommyyu 发表于 2024-2-5 15:06:51

详细说明一下问题?

Husj0711 发表于 2024-2-6 22:39:16

实际上就是指向指针的指针呀,跟着小甲鱼后面就1学到啦
页: [1]
查看完整版本: 关于求指针地址的问题