#define LEN sizeof(struct student) 这个LEN长度是多少?

HiLeeto 2009-03-14 02:55:07
#include <malloc.h>
#define NULL 0
#define LEN sizeof(struct student)

struct student
{long num;
float score;
struct student *next;
};

int n;

struct student *creat(void)
{struct student *head;
struct student *p1,*p2;
n=0;
p1=p2=(struct student*)malloc(LEN);
scanf("%ld,%f",&p1->num,&p1->score);
head=NULL;
while(p1->num!=0)
{n=n+1;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct student*)malloc(LEN);
scanf("%ld,%f",&p1->num,&p1->score);
}
p2->next=NULL;
return head;
}

malloc(LEN)开辟一个长度为LEN的内存区,LEN己定义为sizeof(struct student),那么,这个LEN的长度是多少呢?仅仅是struct student所占的字符长度还是?
...全文
1335 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnStreamlet 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 arong1234 的回复:]
除了解答一些垃圾考题的答案之外我想不出还有什么用处。任何依赖于它直接值的用处都可能是有害的
[/Quote]

不用那么绝对么。何必因为一些垃圾考题而去排斥知道呢


lwouyang 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 arong1234 的回复:]
一个好习惯就是不要去手工计算这个值,你要知道它等于12干吗呢?而且这个值随着编译器设置变化还会变化,你当作它等于12 就可能会有严重错误的,所以只要知道它等于student的大小就行了,不要首先假定自己算对了,并假定它等于多少
引用 2 楼 pengzhixi 的回复:
应该是 12,注意边界对齐的影响就是了。

[/Quote]
谢谢赐教!呵呵!不过有些地方还真是得费点功夫考究下,那就跑跑下看咯!!!
liuysheng 2009-03-14
  • 打赏
  • 举报
回复
边界对齐,win32环境下,VC6。0

是12
xie0077 2009-03-14
  • 打赏
  • 举报
回复
在32位的OS上是12个字节,鉴定完毕
在64位OS上是16个字节。
arong1234 2009-03-14
  • 打赏
  • 举报
回复
你把你vc内得完整代码贴出来

[Quote=引用 12 楼 HiLeeto 的回复:]
我就直接把这个复制到VC里,然后
main()
{printf("%d\n",LEN)
}
得出结果是56
[/Quote]
KevinHo 2009-03-14
  • 打赏
  • 举报
回复
就是student占用的内存字节数,注意内存对齐的问题。
应该是12吧
你用sizeof()测,然后输出用%u来作为格式控制符
哪里来的56……
HiLeeto 2009-03-14
  • 打赏
  • 举报
回复
不知道%d 对不对
HiLeeto 2009-03-14
  • 打赏
  • 举报
回复
我就直接把这个复制到VC里,然后
main()
{printf("%d\n",LEN)
}
得出结果是56
higoalhwl 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 HiLeeto 的回复:]
谢谢楼上几位,刚用%d输出,得56
明白什么意思了
[/Quote]
56是怎么算出来的?
arong1234 2009-03-14
  • 打赏
  • 举报
回复
除了解答一些垃圾考题的答案之外我想不出还有什么用处。任何依赖于它直接值的用处都可能是有害的

[Quote=引用 6 楼 cnStreamlet 的回复:]
引用 3 楼 arong1234 的回复:
一个好习惯就是不要去手工计算这个值,你要知道它等于12干吗呢?而且这个值随着编译器设置变化还会变化,你当作它等于12 就可能会有严重错误的,所以只要知道它等于student的大小就行了,不要首先假定自己算对了,并假定它等于多少
引用 2 楼 pengzhixi 的回复:
应该是 12,注意边界对齐的影响就是了。


知道是 12 还是有用的
[/Quote]
ctan 2009-03-14
  • 打赏
  • 举报
回复
你管它是多少?
只要知道是这个结构的大小就可以了
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 HiLeeto 的回复:]
谢谢楼上几位,刚用%d输出,得56
明白什么意思了
[/Quote]
汗。。应该是12字节啊。
pengzhixi 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 arong1234 的回复:]
一个好习惯就是不要去手工计算这个值,你要知道它等于12干吗呢?而且这个值随着编译器设置变化还会变化,你当作它等于12 就可能会有严重错误的,所以只要知道它等于student的大小就行了,不要首先假定自己算对了,并假定它等于多少
引用 2 楼 pengzhixi 的回复:
应该是 12,注意边界对齐的影响就是了。
[/Quote]

呵呵,主要是强调下边界对齐的影响。
cnStreamlet 2009-03-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 arong1234 的回复:]
一个好习惯就是不要去手工计算这个值,你要知道它等于12干吗呢?而且这个值随着编译器设置变化还会变化,你当作它等于12 就可能会有严重错误的,所以只要知道它等于student的大小就行了,不要首先假定自己算对了,并假定它等于多少
引用 2 楼 pengzhixi 的回复:
应该是 12,注意边界对齐的影响就是了。
[/Quote]

知道是 12 还是有用的
HiLeeto 2009-03-14
  • 打赏
  • 举报
回复
谢谢楼上几位,刚用%d输出,得56
明白什么意思了
  • 打赏
  • 举报
回复
malloc(LEN)开辟一个长度为LEN的内存区,LEN己定义为sizeof(struct student),那么,这个LEN的长度是多少呢?仅仅是struct student所占的字符长度还是?
就是student占用的内存字节数,注意内存对齐的问题。
arong1234 2009-03-14
  • 打赏
  • 举报
回复
一个好习惯就是不要去手工计算这个值,你要知道它等于12干吗呢?而且这个值随着编译器设置变化还会变化,你当作它等于12 就可能会有严重错误的,所以只要知道它等于student的大小就行了,不要首先假定自己算对了,并假定它等于多少
[Quote=引用 2 楼 pengzhixi 的回复:]
应该是 12,注意边界对齐的影响就是了。
[/Quote]
pengzhixi 2009-03-14
  • 打赏
  • 举报
回复
应该是 12,注意边界对齐的影响就是了。
Treazy 2009-03-14
  • 打赏
  • 举报
回复
LEN的长度就是就是struct student的长度

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧