指针地址

3

为什么我们不能将指针的地址存储在另一个指针中?指针只是一种特殊类型的变量,它有一些地址,但为什么我不能将该地址存储到另一个指针中呢?

int main()
{
    int * ptr;
    int * q;
    q = &ptr;
}

为什么这段代码有误?
1个回答

12

你可以将一个指针 - 或任何其他对象类型 - 的地址存储在另一个指针中。但你必须要正确地获取类型; 你正在尝试将一个指针的地址存储在指向 int 的指针中,而不是指向指针的指针。

int ** q = &ptr;   // pointer to pointer to int

为什么要使用 **,有任何逻辑上的原因吗? - Nilesh Kumar
4
@NileshKumar的意思是“指向指针”。通常情况下,<type>*表示“指向 <type> 的指针”,因此 int* 表示“指向 int 的指针”,而 int** 表示“指向指向 int 的指针”。 - Mike Seymour
2
另外,“地址”运算符&的类型是“操作数类型的指针”。如果你有一个int foo并执行&foo,结果类型是int *。同样地,如果你有一个char * bar并执行&bar,结果类型是char **。所以,&会加上另一个星号 ;) - DarkDust

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接