c语言结构体中的数组和指针用起来有什么区别?

我定义了这么一个结构体:
struct word
{
char*word1;
int line[1000];
};
struct word danci
//然后用一个函数getword读取输入并给该结构体赋值,具体是怎么样就不写了
getword(danci,100);
然后:
printf("%d",danci.line[0]);
这句报错了,原因是struct word danci没有初始化
但是我把结构体中int line[1000]改为int*line再给line分配一个地址则不会报错。
请问这是为什么????
结构体中的指针和数组究竟有什么不同??
代码放不下我发贴吧上了http://tieba.baidu.com/p/2647520159?pid=40243893526&cid=
如果把结构体中的数组改为指针再分配一下空间就能正常运行了

先声明一点,getword(danci,,100)是不能给danci赋值的,因为结构相当于变量,当一个变量作为参数时,程序用的是这个参数的一个副本,也就是参数是danci,传进去时danci1.有danci==danci1,而&danci!=&danci1.而退出函数后danci1的空间也被回收。因此danci在弄完函数时,他的值不变,因此未初始化。然而对未初始化的指针,无论在danci还是danci1,指针指向的地址是相同的。对于已初始化的指针,如数组(由于分配了空间)。danci和danci1的line的地址是不同的。由于分配地址用来malloc函数,指针指向堆区,退出函数时,堆区的空间没有被释放(free函数人工释放)。由于danci和danci1的地址相同,空间没被释放。因此danci的line的值已经变了。这样做的改变也保持了。其实要做好用getword(&danci,100)就0k了。追问

是我没说清楚。。。不好意思,getword函数是我自己写的,不是标准库里的,代码链接我发上来了,帮忙看看吧

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-13
感觉不是lz描述的问题,单纯看printf那句话没错。
建议lz贴程序。
----------------
给一个函数传递结构体最好用这种方式 struct word *word追问

这里贴不下我发贴吧上了,帮忙看下吧
http://tieba.baidu.com/p/2647520159?pid=40243893526&cid=

本回答被提问者采纳
第2个回答  2013-10-13
getword(danci,100);你这个是给结构体的哪个成员赋值的?
相似回答