大家好,今天小编来为大家解答以下的问题,关于Struct的定义这个很多人还不知道,现在让我们一起来看看吧!
上一小节我们了解了声明的定义,那么定义是什么呢?文章源自微观生活(93wg.com)微观生活-https://93wg.com/42188.html
文章源自微观生活(93wg.com)微观生活-https://93wg.com/42188.html
---定义是要求编译器填充前面声明没有书写的地址栏。 也就是说某变量对应的地址,只有在其定义时才知道。文章源自微观生活(93wg.com)微观生活-https://93wg.com/42188.html
因此实际的在栈上分配内存等工作都是由变量的定义完成的,所以才有声明的变量其实不分配内存。但应注意一个重点,定义是生成映照元素需要的地址,因此定义也就说明了它生成的是哪一个映照元素的地址,而如果此时编译器的映照表(即之前说的编译器内部用于记录映照元素的变量表、函数表等)中没有那个映照元素,即还没有相应元素的声明出现过,那么编译器将报错。文章源自微观生活(93wg.com)微观生活-https://93wg.com/42188.html
在这里我们需要说下C和C++在定义Struct的区别, 先看下面2段代码:文章源自微观生活(93wg.com)微观生活-https://93wg.com/42188.html
include <stdio.h>struct S0{ char mName[10]; int mBornYear;};typedef struct _S1{ char mName[10]; int mBornYear;}S1;S0 sa;S1 sb;文章源自微观生活(93wg.com)微观生活-https://93wg.com/42188.html
那么上面的代码中对Struct的定义都对了吗?文章源自微观生活(93wg.com)微观生活-https://93wg.com/42188.html
熟悉C/C++的同学应当能够马上知道第二段的代码错了。文章源自微观生活(93wg.com)微观生活-https://93wg.com/42188.html
为何呢?文章源自微观生活(93wg.com)微观生活-https://93wg.com/42188.html
由于C语言中对于Struct的定义是需要使用struct S0 sa这类方式。文章源自微观生活(93wg.com)微观生活-https://93wg.com/42188.html
关于“Struct的定义”的内容,小编就分享到这里了,大家还有哪些需要补充的呢?无妨在评论区留言分享,让更多的朋友受益!您的每一个留言,和每一个赞,都是我前进的动力!喜欢的话记得收藏、分享给身旁的朋友。
评论