指向结点的结构体指针,再进入子函数中,它的结点成员为什么会改变?求原理。
注:为了代码的方便,我只写一个子函数。通过循环使用这个函数,来测试指针进入函数内后成员的改变。本程序在vs2010中进行的调试。
程序代码:
#include<stdio.h>
//结构体定义
typedef struct LNode
{
int date;
struct LNode *next;
}node,*LinkNode;
//问题测试函数
void issue(LinkNode &L)
{
printf("\n进入函数内\nL的地址%x, L指向的地址%x, L->date的值%d和地址%x, L->next的值%x\n",&L,L,L->date,&L->date,L->next);
node p;
L=&p; //-----关键点,注释后,则第二次进入函数,L->date正常不会变了
L->date=2;
printf("赋值后\nL的地址%x, L指向的地址%x, L->date的值%d和地址%x, L->next的值%x\n\n",&L,L,L->date,&L->date,L->next);
}
//主函数
void main()
{
LinkNode L=new node;
printf("\n初始化后\nL的地址%x, L指向的地址%x, L->date的值%d和地址%x, L->next的值%x\n",&L,L,L->date,&L->date,L->next);
issue(L);
printf("\n主函数\nL的地址%x, L指向的地址%x, L->date的值%d和地址%x, L->next的值%x\n",&L,L,L->date,&L->date,L->next);
issue(L);
printf("\n主函数\nL的地址%x, L指向的地址%x, L->date的值%d和地址%x, L->next的值%x\n\n",&L,L,L->date,&L->date,L->next);
}输出结果如下:
我上传不了图片,就描述一下吧:
在函数中,让结构体指针指向“在函数内创建的结构体(不是结构体指针哦)”并给date赋值,回到主函数后->date值正常。
但再传指针进去某个函数后,发现它的->date就变了。
通过输出地址,发现结构体指针&L正常,结构体指针指向的地址L也没有变化,就是结构体的成员L->date变了。
并且发现,“结构体指针指向的地址”与结构体成员“L-date”的地址一样。
请问为什么会有粗体部分?










附上次运行结果(我确实是没想到这一层):