保存数组地址的指针地址如何相同?

时间:2015-07-28 11:50:58

标签: c++ c arrays pointers

这里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);
}

4 个答案:

答案 0 :(得分:7)

您的printf不正确。应该r将地址r打印到:

printf("%p %p", r, a);

使用*r,您尊重r(即跳转到r指向的地址),从而打印a的地址。

答案 1 :(得分:2)

请注意

int *p=a;

表示ap现在指向同一地址。

此外,r指向pp的地址)而不是*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,因此您获得了地址。