#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);
}
Run Code Online (Sandbox Code Playgroud)
这个例子工作,因为我传递一个指向函数的指针,并将其分配给函数内部的临时指针,结果显示指针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;
}
Run Code Online (Sandbox Code Playgroud)
同一步骤在主函数中不起作用.我知道你可以使用没有星号的地址ptr2 = ptr1,它会工作.
但是,在第一个例子中,我可以直接将指针作为函数参数分配给带有星号的新指针(或称为dereferecing?),但在第二个示例中,我不能在main函数中执行此操作.
有人可以帮忙解决这个问题吗?感谢你的时间.
在这两个示例中,您将取消引用未初始化的指针,这是未定义的行为.
对于指针赋值问题,您可以直接指定:
int *ptr2 = ptr2;
Run Code Online (Sandbox Code Playgroud)
在第二个示例中,如果您确保ptr1在有效位置的点.例如,
int x;
int *ptr1 = &x; /* ptr1 now points to the address of x */
*ptr1 = 7;
int *ptr2;
ptr1 = ptr2;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3360 次 |
| 最近记录: |