[英]Address of the pointer in C++
我试图理解指针,我不能得到一件事。 例如,
//part of code
int *p;
int tab[3];
所以现在我们有变量tab
,其中包含数组第一个元素的地址。 我想创建一个指向该指针的指针。 所以,我会这样做:
p=&tab;
如果它可以工作, p
将是tab
的地址(这意味着它将指向tab
)不幸的是它不起作用。 那么如何获得指针本身的地址呢? 地址的正确类型是什么? (addresstype *p
)我想指向内存块,它包含tab
的第一个元素的地址,而不是tab
本身。
所以现在我们变量tab包含数组的第一个元素的地址。
不,我们有一个变量tab
,它是一个数组。
我想创建一个指向此指针的指针。
如果你想要一个指向数组的第一个元素的指针,那么这很容易:一个数组可以隐式转换为该指针(这导致广泛但不正确的信念,即数组是一个指针)。
int * p = tab;
如果你想要一个指向数组的指针而不是第一个元素,那么这是一个不同的类型:
int (*p)[3] = &tab;
但你通常不会想要那样的东西。
那么如何获得指针本身的地址呢?
没有指针,所以无法获得该地址。 如果你有一个指针,那么你可以获取该地址,就像任何其他对象一样:
int * p = arr; // Pointer to first element of array
int ** pp = &p; // Pointer to pointer
我想指向内存块,它包含tab的第一个元素的地址,而不是tab本身。
这是没有意义的; tab
是包含其元素的内存块。
请记住,数组衰减到指向第一个元素的指针。 因此,无论何时需要指向数组的指针,只需按原样使用数组即可。 喜欢
p = tab;
尝试这个
int *p;
int tab[3];
p = &tab[0];
测试此代码,您将看到p如何直接指向数组的第一个位置,因此您也可以从p访问其值。
int *p;
int tab[3];
tab[0] = 56;
tab[1] = 57;
tab[2] = 58;
p = tab;
cout << p[0] <<endl;
cout << p[1] <<endl;
cout << p[2] <<endl;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.