c++数据结构随笔(1)

创建数据结构单链表的时候,突然碰到基础不牢固的问题,指针问题。就当复习指针了。

问题是如果三个指针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的同时也可以改变对方。

原文地址:https://www.cnblogs.com/qjqj0-0/p/11807512.html