十二、结构类型
🎈enum / 枚举
在定义几个独立的const常量时 可以使用枚举
枚举是一种用户定义的数据类型 关键字是enum
用于以更方便的方式定义多个可以排列的名字
语法:enum 枚举类型的名字 {名字1,名字2 ... 名字n};
比如:
const int ONEVALUE=0;
const int TWOVALUE=1;
const int THREEVALUE=2;
可以改为:
enum MYVALUE {
ONE,TWO,THREE};
// 在这里ONE默认就是0 TWO默认就是1 THREE默认就是2
枚举类型的名字并不经常使用 而是直接使用大括号内定义的名字
这些名字它们就是常量符号 类型为int
值依次从0至n递增
枚举的意义 就是给一些排列的常量起名字
比如 enum MYVALUE{ONE,TWO,THREE} 的意思就是声明一种数据类型名为MYVALUE
可以将其当作一种数据类型来使用 但使用时必须带上enum关键字
比如void f(enum MYVALUE m) 或 enum MYVALUE m=TWO
由于其本质就是int 因此可以作为int来输入输出(%d)
用的时候 可以在最后加上一个计数器 用于表示枚举量共有多少:
enum MYVALUE{
ONE,TWO,THREE,countVALUE}
在声明枚举量的时候 还可以指定值:
enum MYVALUE{
ONE=2,TWO,THREE=6}
// 此时ONE是2 TWO是3 THREE是6 没有4和5了
然而 枚举实际上很少用…
🎈struct / 结构
若需要同时表达多个数据 或 表达出一个整体(比如一个人有姓名性别年龄之类的)
此时 需要用到结构
结构就是复合的数据类型 在其中可以有很多各种类型的成员 用一个变量来表示这些数据
(结构其实就像Java中的封装思想 将多个属性封装成了一个类)
简单例子:
#include <stdio.h>
// 声明一个类型为student的结构 里面有name属性和age属性
struct student
{
char* name;
int age;
};
int main(int argc,char const *argv[])
{
struct student student1;
student1.name="陈涛";
student1.age=18;
printf("%s\n",student1.name);
printf("%i\n",student1.age);
return 0;
}
和本地变量一样 在函数内部声明的结构类型只能在函数内部使用
因此 通常是在函数外部声明结构类型 这样即可被多个函数使用了
在声明结构变量(在Java中是创建对象)的时候 前面要加上struct
关键字 代表这是一个结构而不是自带的类型
struct dog
{
char* name;
int age;
}
struct dog dog1,dog2;
还有另一种方法来声明无名结构 (有点类似于JS的匿名函数…):
只是想要两个变量 而不关注其名字
struct