lee-romantic 's Blog
Everything is OK!
Toggle navigation
lee-romantic 's Blog
主页
About Me
归档
标签
C中的结构体
2019-05-27 15:23:22
312
0
0
lee-romantic
在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为: ``` struct 结构体名{ 结构体所包含的变量或数组 }; ``` 结构体是一种集合,它里面包含了多个变量或数组(**注意:.c文件中的C语言结构体不允许包含函数!!!**)。它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(`Member`) 结构体也是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据。 像 `int、float、char` 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型或构造数据类型。 **结构体变量** 既然结构体是一种数据类型,那么就可以用它来定义变量。例如: ``` struct stu stu1, stu2; ``` 定义了两个变量 stu1 和 stu2,它们都是 stu 类型,都由 5 个成员组成。`注意关键字struct不能少,如果实在是想省略struct,可以在定义结构体时使用typedef`,如:。 ``` typedef struct Complex{ int read; int image; }Complex; //那么,在说明Complex变量的时候可以这样写: Complex complex; //不用加关键字struct ``` stu 就像一个“模板”,定义出来的变量都具有相同的性质。也可以将结构体比作“图纸”,将结构体变量比作“零件”,根据同一张图纸生产出来的零件的特性都是一样的。 你也可以在定义结构体的同时定义结构体变量: ``` struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在学习小组 float score; //成绩 } stu1, stu2; ``` 将变量放在结构体定义的最后即可。 如果只需要 `stu1`、`stu2` 两个变量,后面不需要再使用结构体名定义其他变量,那么在定义时也可以不给出结构体名。 理论上讲结构体的各个成员在内存中是`连续存储的`,和数组非常类似,例如上面的结构体变量 stu1、stu2 的内存分布如下图所示,共占用 4+4+4+1+4 = 17 个字节。  但是在编译器的具体实现中,各个成员之间可能会存在缝隙,对于 stu1、stu2,成员变量 group 和 score 之间就存在 3 个字节的空白填充(见下图)。这样算来,stu1、stu2 其实占用了 17 + 3 = 20 个字节。  参考:http://c.biancheng.net/cpp/html/88.html ##C++中也有结构体,与C中的不太一样: C的结构体内`不允许有函数存在`,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。 C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。 C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的。 更多参考:https://www.cnblogs.com/qiumingcheng/p/7814970.html
上一篇:
Windows 下U盘安装 Ubuntu
下一篇:
C/C++同一数组中保存多种数据类型的相关问题探讨
0
赞
312 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册