C 将指针赋值给指针

新手上路,请多包涵
#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 许可协议

阅读 593
1 个回答

在这两个示例中,您都在取消引用未初始化的指针,这是 _未定义的行为_。

对于指针赋值题,可以直接赋值:

  int *ptr2 = ptr2;

在您的第二个示例中,只要您确保 ptr1 指向有效位置。例如,

 int x;
int *ptr1 = &x; /* ptr1 now points to the address of x */
*ptr1 = 7;
int *ptr2;
ptr1 = ptr2;

原文由 P.P 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏