c++中指针的地址

Address of the pointer in C++

本文关键字:地址 指针 c++      更新时间:2023-10-16

我试图理解指针,我不能得到一件事。例如,

//part of code
int *p;
int tab[3];

那么现在我们有了变量tab,它包含了数组第一个元素的地址。我想创建一个指向那个指针的指针。因此,我将这样做:

p=&tab;

如果行得通,p将是tab的地址(这意味着它将指向tab)不幸的是,它不起作用。那么如何得到指针本身的地址呢?正确的地址类型是什么?(地址类型*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;

try this

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;