鱼C论坛

 找回密码
 立即注册
查看: 3528|回复: 17

谁能告诉我链表应该怎么理解?

 关闭 [复制链接]
发表于 2011-7-31 13:29:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 540366413 于 2011-8-2 12:40 编辑

比如说我定义了一个结构体
struct stu
{
    int i;
    struct stu *next;
};
然后我这样p=(struct stu *)malloc(sizeof(struct stu));
为什么新开辟的空间也有个元素 i    ?  {:2_36:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-31 14:26:12 | 显示全部楼层
肯定有啦!(struct stu*) malloc ( sizeof( struct stu);你开辟的这一段空间 本身就是指向这个结构的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-31 14:29:57 | 显示全部楼层

可是这个(struct stu*)只能说明返回的是结构体指针呀,但是不能说明新开辟的那个空间是结构体也不能说明它里面也有个i 呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-31 15:07:10 | 显示全部楼层
540366413 发表于 2011-7-31 14:29
可是这个(struct stu*)只能说明返回的是结构体指针呀,但是不能说明新开辟的那个空间是结构体也不能说明它 ...

其实我链表也学的很烂的!链来链去  链到头晕!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-31 16:02:19 | 显示全部楼层
元素i是结构体stu的成员
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-31 16:56:33 | 显示全部楼层
小磊 发表于 2011-7-31 16:02
元素i是结构体stu的成员

struct stu
{
    int i;
    struct stu *next;
};
然后我这样p=(struct stu *)malloc(sizeof(struct stu));
p->i  怎么解释?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-31 17:01:59 | 显示全部楼层
结构体 + 指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 02:18:51 From FishC Mobile | 显示全部楼层
链表就是前一个元素持有后一个元素的地址。是散列存放的。至于楼主说的开辟了空间也会有元素的问题,我理解是这个样的
malloc函数需要一个字节数作为参数,返回分配的内存单元的手地址。其实这个受地址没什么实际意义的,但当你把该地址指针转换为结构体指针类型时,该块存储区域就变成存放你定义的结构体的数据了。所以也就有了一个元素。这是本人的理解,哎语文没学好啊!组织能力欠佳
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 15:21:02 | 显示全部楼层
默认返回的是void *,void *类型的指针可以自动转化成各种类型的指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 15:22:14 | 显示全部楼层
指针说的直接一点就是地址,记录下一个(或者上一个)node在哪里,而int i是用于存放在node的数据的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 16:20:19 | 显示全部楼层
trbrcdut 发表于 2011-8-1 15:22
指针说的直接一点就是地址,记录下一个(或者上一个)node在哪里,而int i是用于存放在node的数据的

开辟的那个节点里为什么会有i 呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 16:21:41 | 显示全部楼层
rainymay 发表于 2011-8-1 02:18
链表就是前一个元素持有后一个元素的地址。是散列存放的。至于楼主说的开辟了空间也会有元素的问题,我理解 ...

转换成结构体类型的指针就会出现结构体成员吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 17:55:27 | 显示全部楼层
结构体  当整体看 你定义的结构体里面有 i和指针.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-1 19:43:28 | 显示全部楼层
331875798 发表于 2011-8-1 17:55
结构体  当整体看 你定义的结构体里面有 i和指针.

(struct stu *)malloc(sizeof(struct stu))但是这不是结构体
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-1 23:30:57 | 显示全部楼层
结构体就是包含了一个i和node,所以会开辟i,但是结构体的准确大小就会涉及结构体的边界对齐
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-2 00:20:56 | 显示全部楼层
你所看到的那个成员I只不过是声明出来的.并非定义
可以这么说,你把那块开辟的空间来存放你结构体内的数据,那块空间的字节必定会大于等于你的结构体的字节数(因为牵扯到内存对齐的问题).当你写 st->i = 1 时,就会找到那块空间内的4个字节存放i的内容

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-2 00:31:16 | 显示全部楼层
i其实就是一个标示符,为了方便的确定地址,前面的类型才是划分malloc创建的内存区域的一个根据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-2 00:35:04 | 显示全部楼层
说白了你问这个问题就相当于问java中的
Student stu = new Student();

stu.id
为什么会有id成员
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-27 09:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表