设为首页 加入收藏

TOP

扎实学习C语言(二)结构和联合
2015-01-22 21:34:52 来源: 作者: 【 】 浏览:96
Tags:扎实 学习 语言 结构 联合

关于结构体的一个问题:

看下面这个结构体的声明,把它记作A

struct node
{


	int a;
	float b;
	struct node *next;
}s;


和如下的结构体声明,把它记作B
struct node
{


	int a;
	float b;
	struct node  next;
}s;


他们的区别是啥?


今天学习《C和指针》第10章,以前,没注意过这个问题,现在对声明和定义的理解又深了一点

声明是要告诉编译器,这个甜饼机做出来的甜饼有多大,但是甜饼机不是甜饼本身,定义就是甜饼本身!

B中的结构体声明不正确,是因为编译器会认为 在 代码语句 : struct node next 这里是使用了未定义的标识符,因为此时struct node 这个结构体还没有声明成功,为什么?因为声明是要告诉编译器你该给我这个变量预留多大的空间,而此时struct node 结构体的大小并不知道,甜饼机都没有完成,当然吃不到甜饼啦!


A中的struct node * 是指针类型,我们知道指针类型在windows 32位机器上都是4字节,所以,编译器分析到代码句:: struct node *next时,你就可以知道我这个next变量是四个字节,从而完成声明的工作


你会发现,next的类型换做任意结构体指针,都是可以正确编译的,比如,struct unknown *next ; 此时虽然 struct unknown并没有声明,也是正确的,因为,编译器此时并不关心具体的标号,我只关心我的工作,那就是分配内存!

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Objective-c学习笔记―― Ubuntu .. 下一篇用C语言来验证哥德巴赫猜想(定义..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: