创建数据结构单链表的时候,突然碰到基础不牢固的问题,指针问题。就当复习指针了。
问题是如果三个指针a和b和r,
b=a;
b->next = r;
那么a->next会不会变?
然后写了一个小的cpp验证了一下。
struct node{ int data; node *next; }; int main() { node *p = (node*)malloc(sizeof(node)); node *q = p; node *r = (node*)malloc(sizeof(node)); p->next = NULL; cout<<q->next<<endl; p->next = r; cout<<q->next<<endl; return 0; }
结果是不一样的,说明q->next会随着p->next的指向变化而变化。
印证了我最开始的想法。
然后又接着想,
b=a;
a->next = r;
那么b->next会不会变?
答案也是会变的,所以如果把b和a指向同一个区域(即b=a),那么可以通过改变a->next来改变b->next。
根据最初的假设接着继续想,
b=a;
a=r;
b的指向会不会变?
int main() { node *p = (node*)malloc(sizeof(node)); node *q = p; node *r = (node*)malloc(sizeof(node)); cout<<q<<endl; p = r; cout<<q<<endl; cout<<p<<endl; return 0; }
答案是不会哦,
总结:
b=a 这个语句只表示b和a指向同一片区域,如果a改变指向,b的指向还是不会变的。
而b=a之后,改变b->next和a->next的同时也可以改变对方。