首页 > 代码库 > 扎实学习C语言(二)结构和联合
扎实学习C语言(二)结构和联合
关于结构体的一个问题:
看下面这个结构体的声明,把它记作A
struct node { int a; float b; struct node *next; }s;
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并没有声明,也是正确的,因为,编译器此时并不关心具体的标号,我只关心我的工作,那就是分配内存!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。