我试图理解指针,我不能得到一件事.例如,
//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自身.
所以现在我们变量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 是包含其元素的内存块.