指针对值的修改

今天看程序时对二级指针有些疑问,写了个小测试,记录一下。

 

#include <stdio.h>

struct list{
    int num;
    struct list *next;
};

int main()
{
    struct list list, list2, *head,**head2, *cur, **cur2;

    list.num = -2;
    list.next = &list2;
    list2.num = 3;
    list2.next = NULL;
    head = &list;
    head2 = &head;
    cur2 = head2;
    cur = *cur2;
    printf("%x, %x, %x, %x, %x, %x, %x\n", &list, head, head2, cur, cur2, &head, &cur);
    *cur2 = cur->next;
    printf("%x, %x, %x, %x, %x\n", &list, head, head2, cur, cur2);
    //*head2 = head->next;
    //printf("%x, %x, %x, %x, %x\n", &list, head, head2, cur, cur2);
    
    return 0;
}

 

输出:

28ff10, 28ff10, 28ff04, 28ff10, 28ff04, 28ff04, 28ff00
28ff10, 28ff08, 28ff04, 28ff10, 28ff04

第二次打印时,只有head的内容改变了,而cur的内容未变更,开始看的时候一直认为这2个指针应该一样的,把他们对应地址输出是才发现有问题。

head指针的地址是28ff04,内容是28ff10。

cur   指针的地址是28ff00,内容同head指针。

而cur2的内容是head的地址,并不是cur的地址。

其实本来就是这样,只是感觉有点绕。。。

cur=*cur2,但*cur2=cur->next不改变cur的值。




posted on 2013-01-19 00:52  kevin_kang  阅读(485)  评论(0)    收藏  举报

导航