将指针 * 分配给指针 ** 时它是如何工作的?
我正在学习指针。当我练习通过指针 ** 分配指针 * 然后 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;