这里p
是一个整数指针,可以保存int
变量的地址,但它也有一个存储器地址 - 存储它。
让
数组a = 1002
的基址
指针p = 2008
的地址
当我们写道:int *p=a; //p points to the base address of array a
和int **r=&p; //means *r points to the address of p
*r
如何指向a
的地址,它应指向p
的地址。
#include <stdio.h>
void main()
{
int a[3] = {1, 2, 3};
int *p =a;
int **r = &p;
printf("%p %p", *r, a);
}
答案 0 :(得分:7)
您的printf
不正确。应该r
将地址r
打印到:
printf("%p %p", r, a);
使用*r
,您尊重r
(即跳转到r
指向的地址),从而打印a
的地址。
答案 1 :(得分:2)
请注意
int *p=a;
表示a
和p
现在指向同一地址。
此外,r
指向p
(p
的地址)而不是*r
。
因此,要打印p
的地址,只需在r
中使用*r
代替printf()
。
printf("%p %p", r, a);
答案 2 :(得分:2)
下面是什么?
int **r = &p;
基本上使用上述内容,r
保留p
的地址对吗?
因此,如果您取消引用r
,就像执行*r
一样,它会尝试
检索存储在p
地址的值对吗?这是a
。
注意:您需要在printf中转换为void*
:
printf("%p %p", (void*)*r, (void*) a);
答案 3 :(得分:1)
不是 - &gt; - &gt;与 - &gt;
相同当你说,
int *p = a;
这意味着,P指向a,或P保存a。
的地址 int **r=&p;
R持有P的地址,
如果你使用printf("%p %p", r, a);
,你将得到P的地址。
但是由于您要取消引用r,因此您获得了地址。