| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 511 人关注过本帖
标题:提问关于c语言中结构体数组的问题。
只看楼主 加入收藏
zbgg222
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-11-7
结帖率:0
收藏
已结贴  问题点数:5 回复次数:6 
提问关于c语言中结构体数组的问题。
请问我定义一个结构体struct L。它包含int a,int b,char c;
再定义一个struct L *w,*new;

那么,new=(struct L *)malloc(5*sizeof(struct L)),那么new是不是就是空的L[5]呢?请大神帮忙回答一下。。还有程序里总出现dereferencing pointer to incomplete?
我在做通讯录。求教。。
搜索更多相关主题的帖子: 通讯录 结构体 c语言 
2015-11-07 22:49
lzl123321
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:41
专家分:148
注 册:2015-10-15
收藏
得分:3 
以下是引用zbgg222在2015-11-7 22:49:35的发言:

请问我定义一个结构体struct L。它包含int a,int b,char c;
再定义一个struct L *w,*new;

那么,new=(struct L *)malloc(5*sizeof(struct L)),那么new是不是就是空的L[5]呢?请大神帮忙回答一下。。还有程序里总出现dereferencing pointer to incomplete?
我在做通讯录。求教。。



1.首先弄明白结构体本质上是重新定义的一个数据类型,就像int, char一样
你定义一个新的数据类型为“strut L”此时尚未定义变量!就像你用int 一样,你可以像用“int”一样使用“struct L” L不要单独拿出来,比如:struct L M(M才是变量,L就像你用int中的t一样,无意义啊~)
struct L 数据类型的结构是
{
int a
int b
char c
}
既然struct L是一种数据类型,那你再定义struct L *w,*new; 是什么意思?难道数据类型int可以通用float么,显然不行~ 你重新定义struct F, *w,*new是可以的!

;2. new=(struct L *)malloc(5*sizeof(struct L)),那么new是不是就是空的L[5]呢?

先弄明白这里new是什么呢?假设你新定义了一个structF, 结构为 *w,*new,这里new存放的是一个 涵盖五个struct L数据类型大小的一块内存的首字节地址!你为一个结构体内部的一个节点分配一块内存,这个完全无法理解啊,int或者int中的t字母有指定内存么?(不恰当的类比,不过大概就是这个意思)

struct L变量都没定义呢,你这个new能指向L[5]才叫怪了,L[5]是什么鬼,结构体怎么跟数组混在一起了?????
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这里补充一点吧,最近刚看到链表,就适当说一下对结构体,指针,数组的一点看法,希望对你有帮助:

数组分配内存是连续的,但是当数据足够大的时候,你就很难找到整块连续的可用内存,实际情况是你需要调动零散分布在各个区的内存来保存数据,可是随机存储后还要考虑到调用,这就决定了一个数据单元不光要存数据,还要保存两个内存之间的关系,数组中可以通过内存地址+1来找到下一个数据,但零散存储的可不行,所以要用到指针,这样一个数据单元就要分成两部分,数据部分跟指针部分,而结构体恰恰可以满足这个需求,因为你可以自行构建一个包含数据以及下一个数据指针的结构体,然后循环即可调用数据!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
以上个人看法,刚开始学C,不对之处欢迎指正
建议仔细看一下动态内存,数组,指针,结构体相关的内容,把基本概念弄明白先!

[此贴子已经被作者于2015-11-8 06:16编辑过]

2015-11-08 05:50
zbgg222
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-11-7
收藏
得分:0 
回复 2楼 lzl123321
谢谢你,我用链表做过通讯录,但是动态顺序表没用过。这次想试一下,没想到,贼几把麻烦。。
2015-11-08 10:09
zbgg222
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-11-7
收藏
得分:0 
回复 2楼 lzl123321
还有就是struct L *w,是定义了一个指向结构体L类型的指针变量w
2015-11-08 10:10
lzl123321
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:41
专家分:148
注 册:2015-10-15
收藏
得分:0 
回复 4楼 zbgg222
还有就是struct L *w,是定义了一个指向结构体L类型的指针变量w

这个应该是可以的,问题可能是结构体变量没有定义吧,你尝试用学过的知识做一些东西非常赞的~
多尝试下,遇到问题,解决问题的过程本身就是不断提高的过程~~
2015-11-08 13:39
zbgg222
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-11-7
收藏
得分:0 
回复 5楼 lzl123321
谢谢你。^_^
2015-11-11 14:37
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:3 
回复 6楼 zbgg222
C语言很细微  所以很灵活  你要一点一点去读  不要一下看完
你的new只是一个指针  一个指针只是一个int32或int64的值
而指针只是表示某个内存地址  指针计算单位是指针类型的大小

还有  你new了5个  最多能使用 new[4] new[5]是自寻死路

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2015-11-11 15:05
快速回复:提问关于c语言中结构体数组的问题。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017499 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved