首页 > 解决方案 > 为什么它指向同一个地址?

问题描述

#include<stdio.h>
int main() {
int x = 5;
int* p = &x;
*p = 6;
int** q = &p;
int *** r= &q;
printf("%d\n",*p); //dereferencing p
printf("%d\n",*q); //getting address of q
printf("%d\n",**q); //dereferencing q
printf("%d\n",**r); //getting address of r
printf("%d\n",***r); //dereferencing r
}

变量 q 具有 p 的内存地址,而变量 r 具有 q 的内存地址,那么为什么在尝试打印 q 和 r 的内存地址时会产生相同的结果?

标签: c

解决方案


您的评论表明您在这里误解了一些事情。

printf("%d\n",*q); //getting address of q

你没有得到q. 您正在取消引用q,这恰好是 的地址p*IS 取消引用运算符。如果要打印 的地址q,请执行以下操作:

printf("%p\n", (void*)&q); // No asterisk and you should use the %p specifier for printing pointers.

所以,因为你p=&x; q=&p;当时已经完成了任务

  • **qx与或相同*p
  • *q是相同的p
  • q是一样的&p
  • &q是地址q

推荐阅读