标签:span ret ios blog col 分享图片 技术 bsp using
#include<iostream> using namespace std; struct listNode { int data; listNode *next; listNode(int x):data(x),next(nullptr){} }; int main() { listNode *p1 = nullptr, *p2 = p1; p1 = new listNode(1); cout << p2->data << endl; return 0; }
p1变了,但是指向p1的p2没有变,结果是非法的(p2是空指针,非法访问空指针)
#include<iostream> using namespace std; struct listNode { int data; listNode *next; listNode(int x):data(x),next(nullptr){} }; int main() { listNode *p1 = nullptr, *p2 = p1; p2 = new listNode(1); cout << p1->data << endl; return 0; }
这里也是非法访问空指针,当我们想要通过p2改变p1时,上述代码实际上使得p2指向了另一个对象。
结合以上错误,当我们想要通过p2改变p1时,容易发生以下错误:
#include<iostream> using namespace std; struct listNode { int data; listNode *next; listNode(int x):data(x),next(nullptr){} }; int main() { listNode *p1 = nullptr, *p2 = p1; p1 = new listNode(1); p2->next = new listNode(2); p1 = p1->next; cout << p1->data << endl; return 0; }
根据第一个案例可知,p1改变时,p2不变,所以p2访问了空指针。当我们想要通过p2改变p1时,注意p1的改变要在p2=p1语句之前。
通过p2改变p1:
#include<iostream> using namespace std; struct listNode { int data; listNode *next; listNode(int x):data(x),next(nullptr){} }; int main() { listNode *p1 = new listNode(1), *p2 = p1; p2->next = new listNode(2); p1 = p1->next; cout << p1->data << endl; return 0; }
标签:span ret ios blog col 分享图片 技术 bsp using
原文地址:http://www.cnblogs.com/mu-ye/p/7856106.html