#include <iostream>
using namespace std;
void fn(int* input_ptr) {
int *ptr2 = input_ptr;
cout << "pointer 2 is " << *ptr2 << endl;
}
int main() {
int *ptr1;
*ptr1 = 7;
fn(ptr1);
}
此示例有效,因为我将指针传递给函数,并将其分配给函数内部的临时指针,结果显示指针 2 也是 7。但是,
#include <iostream>
using namespace std;
int main() {
int *ptr1;
*ptr1 = 7;
int *ptr2;
*ptr2 = ptr1; // or I have also tried *ptr2 = *ptr1
cout << "pointer 2 is " << *ptr2 << endl;
}
相同的步骤在 main 函数中不起作用。我知道您可以使用不带星号的地址 ptr2 = ptr1 并且它会起作用。
但是,在第一个示例中,我可以直接将指针作为函数参数分配给带有星号的新指针(或称为取消引用?),但在第二个示例中,我不能在 main 函数中执行此操作。
有人可以帮忙解答这个问题吗?珍惜你的时间。
原文由 0xFF 发布,翻译遵循 CC BY-SA 4.0 许可协议
在这两个示例中,您都在取消引用未初始化的指针,这是 _未定义的行为_。
对于指针赋值题,可以直接赋值:
在您的第二个示例中,只要您确保
ptr1
指向有效位置。例如,