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

我定义了这么一个结构体:structword{char*word1;intline[1000];};structworddanci//然后用一个函数getword读取输入... 我定义了这么一个结构体:
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=
如果把结构体中的数组改为指针再分配一下空间就能正常运行了
展开
 我来答
百度网友8e65fcc
2013-10-13 · 超过23用户采纳过TA的回答
知道答主
回答量:64
采纳率:0%
帮助的人:58.4万
展开全部
先声明一点,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函数是我自己写的,不是标准库里的,代码链接我发上来了,帮忙看看吧
二弼萌8
2013-10-13 · TA获得超过666个赞
知道小有建树答主
回答量:1159
采纳率:0%
帮助的人:336万
展开全部
感觉不是lz描述的问题,单纯看printf那句话没错。
建议lz贴程序。
----------------
给一个函数传递结构体最好用这种方式 struct word *word
追问
这里贴不下我发贴吧上了,帮忙看下吧
http://tieba.baidu.com/p/2647520159?pid=40243893526&cid=
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ceciler7415
2013-10-13 · TA获得超过112个赞
知道答主
回答量:147
采纳率:0%
帮助的人:49万
展开全部
getword(danci,100);你这个是给结构体的哪个成员赋值的?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式