繁体   English   中英

C ++中指针的地址

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM