鱼C论坛

 找回密码
 立即注册
查看: 4265|回复: 5

struct date{int n; char ch; struct date iv]为什么是错误的,而在iv前面加上*是正确

[复制链接]
发表于 2013-5-8 18:31:10 | 显示全部楼层 |阅读模式
1鱼币

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-8 20:45:04 | 显示全部楼层
我想阁下是在学习链表这里吧。struct date iv如果不加*号的话是定义结构体,而你本身结构体就正在定义那又怎么会不出错呢?而struct date *iv定义的是指针变量,这个指针是指向该类型的结构体的,比如 int *iv它是指向int型的指针,这里也是同样的道理。而说明这个指针的类型主要是要用到这个指针指向的地址的大小。还望采纳!!!感激不尽!!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-9 16:02:04 | 显示全部楼层
本帖最后由 熊文杰 于 2013-5-9 16:06 编辑

因为系统不知道struct date iv占几个字节。不好分配空间。如果你前面有个
struct a
{
    int a;
}
这种能够让系统明确知道结构占几个字节的,可以当做成员变量

但是如果
struct date
{
    int n;     //4个字节
    char ch;// 1个字节
    struct date b;//???个字节
}

这样系统根本就不知道怎么计算这个结构体占多少个字节了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-9 16:11:44 | 显示全部楼层
楼上正解  而且 这在逻辑上根本讲不通  
假设 struct data 有12字节长度  那么右侧里面的struct data 也有12字节
这时候 左侧 struct 总的有 length(int char struct)个字节长度 显然不和左侧的12字节相等
就相当于你有一块钱   想买2毛钱的A  3毛钱的B 和 1块钱的C   蛋疼的钱不够啊  
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-9 20:55:40 | 显示全部楼层
强烈支持楼主ing……
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-5-10 18:07:58 | 显示全部楼层
肯定里面用struct date * 的形式,它只是表示一个地址结构,是个指针类型,大小取决于CPU大小,32位下4,
如果用struct date  的形式,编译器不知道大小的,并且里面又有个本结构的类型,相当于一个递归无限循环了。
例如二叉树的数据机构类型
typedf struct BitNode{
    int data;
    struct BitNode *lchild,*rchild;
}BitNode,*BiTree;
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-28 20:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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