C++中指针的地址

use*_*584 2 c++ pointers

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

//part of code

int *p;
int tab[3];
Run Code Online (Sandbox Code Playgroud)

所以现在我们有变量tab包含数组的第一个元素的地址.我想创建一个指向该指针的指针.所以,我会这样做:

p=&tab;
Run Code Online (Sandbox Code Playgroud)

如果它可以工作,p将是tab(这意味着它会指向tab)的地址不幸的是它不起作用.那么如何获得指针本身的地址呢?地址的正确类型是什么?(addresstype *p)我想指向内存块,它包含第一个元素的地址tab,而不是它tab自身.

Mik*_*our 7

所以现在我们变量tab包含数组的第一个元素的地址.

不,我们有一个变量tab,它一个数组.

我想创建一个指向此指针的指针.

如果你想要一个指向数组的第一个元素的指针,那么这很容易:一个数组可以隐式转换为该指针(这导致广泛但不正确的信念,即数组是一个指针).

int * p = tab;
Run Code Online (Sandbox Code Playgroud)

如果你想要一个指向数组的指针而不是第一个元素,那么这是一个不同的类型:

int (*p)[3] = &tab;
Run Code Online (Sandbox Code Playgroud)

但你通常不会想要那样的东西.

那么如何获得指针本身的地址呢?

没有指针,所以无法获得该地址.如果你有一个指针,那么你可以获取该地址,就像任何其他对象一样:

int * p = arr;   // Pointer to first element of array
int ** pp = &p;  // Pointer to pointer
Run Code Online (Sandbox Code Playgroud)

我想指向内存块,它包含tab的第一个元素的地址,而不是tab本身.

这是没有意义的; tab 包含其元素的内存块.

  • @ user3402584:数组可转换为指针,如答案中所述.因此`tab + 1`将其转换为指针,然后添加一个以获取`tab [1]`的地址.但是,尽管允许这种转换,但数组本身并不是指针. (2认同)