将指针 * 分配给指针 ** 时它是如何工作的?

我正在学习指针。当我练习通过指针 ** 分配指针 * 然后 p_to_p = ptr 但 *p_to_p != *ptr。这是我的练习代码

#include <iostream>

using namespace std;

int main()  {
    
    int value = 100;
    int *ptr = &value;
    int **p_to_p = (int**)ptr;

    cout << p_to_p << "   " << ptr << endl; 
    cout << *p_to_p << "   " << *ptr << endl; 

    return 0;
}

请解释在将指针 * 分配给指针 ** 时它是如何工作的。非常感谢!

回答

int **p_to_p = (int**)ptr;

在这里,您重新诠释了 ptr为 a int**。所有对象指针都可以被重新解释为其他类型的指针,但除了极少数情况外,您通常不能通过这种重新解释的指针进行间接处理。

*p_to_p

这并非特例。程序的行为是未定义的。


int **p_to_p = (int**)ptr;

是一个类型转换。一个重新诠释。

您可能想要的与您之前在线上所做的相同:

int **p_to_p = &ptr;

获取指针的地址会给你一个指向指针的指针。


通过将变量声明为 int **,您定义了一个指向整数指针的指针。所以你应该为它分配整数指针的地址。你可以这样做:

int **p_to_p = &ptr;
cout << **p_to_p << endl;

以上是将指针 * 分配给指针 ** 时它是如何工作的?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>