#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所占的字符长度还是?
...全文
1299 19 打赏 收藏 转发到动态 举报
写回复
用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的长度
1) 本套课程针对高校大学生系统学习C语言而录制,从0基础入门讲起,循序渐进,通俗易懂,同时适用于计算机系及非计算机系的同学。通过学习可以帮助大家掌握C语言本质,轻松面对C语言全国二级考试,并达到能独立完成中型C项目、C游戏的水平;2) 多数高校都开设了C语言课程,网上C语言课程也很多,但普遍存在两个问题: (1) 授课方式单一,大多是照着代码念一遍, 对刚刚接触编程的同学来说,感觉晦涩难懂 (2) 授课内容过度注重语法,没有项目实战支撑,造成课程枯燥无趣。本课程针对上述问题进行了改进 (1) 授课方式采用语法讲解+内存布局示意图+项目的方式,让课程生动有趣好理解 (2) 系统全面的讲解了C语言的核心技术点,还配套录制了《全国计算机二级C语言真题精讲》,让学员在掌握C语言编程的同时,还能轻松面对二级考试;3) 课程详细内容: 常量-变量、分支语句、循环语句、操作符和表达式、函数(库函数、自定义函数、递归调用 )、数组(一维数 组、二维数组、数组作为函数参数、指针数组)、指针(指针和指针类型、二级指针和多级指针、指针表达式解析、指针运算、数 组指针、函数指针、回调函数)、调试技巧、程序环境和预处理(翻译环境、运行环境、预定义符号、#define和#undef、宏和函 数、条件编译、文件包含)、 数据在内存中的存储、内存块分配、static、字符函数和字符串函数、自定义类型(结构体、枚举 、联合)、动态内存管理、文件操作(i/o常量、i/o函数、流)。

69,371

社区成员

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

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