指针对值的修改
今天看程序时对二级指针有些疑问,写了个小测试,记录一下。
#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) 收藏 举报
浙公网安备 33010602011771号