这个问题很常见,也是大多数童鞋的疑问;但是网上很多解释不尽人意。建议拷贝代码调试观察各个值的变化
#include <stdio.h>
struct LNode
{
int data;
LNode *next;
};
int main()
{
LNode p;
LNode * q;
p.data = 5;
p.next = NULL;
q->data = 55;//-- Unhandled exception in XXX.exe:0xC0000005:Access Violationq->next = NULL;
return 0;
}
首先,结构体变量之所以没错,是因为声明"p"时编译器就给"p"分配了一个容纳"LNode"结构体的内存空间;而'q'只要是指针,就意味着声明时它只是一个32位的数字,仅此而已!之所以把它声明为LNode类型,或int型,char型,只是为了明确以后移动结点时的长度。
现在q是一个"野指针",它指向的data“,"next"根本不知道是哪儿,所以需要初始化的工作,开辟一块LNode大小的结构体让q指向,然后赋值。
文笔不好,童鞋们慢慢理解了。。。