C++ 结构体, 联合体, 枚举

it2023-10-19  67

结构体

c++中定义结构型变量, 可以省略struct关键字(C中经常会通过typedef定义一个类型别名 然后再去使用它定义变量, 以达到简化代码的目的) struct XX{....}; XX x;//定义结构体类型变量直接省略struct c++结构体中可以直接定义函数,谓之成员函数(方法)在成员函数中可以直接访问该结构体的成员变量,无需"." 或 "->" #include <iostream> using namespace std; struct Student{ //成员变量 char name[20]; int age; //成员函数 void who(void) { // 直接访问成员变量 cout << "我叫" << name << ",今年" << age << "岁" << endl; } }; int main(void) { // c中使用结构体 // struct Student s = {"张三", 28}; // c++中使用结构体 Student s = {"张三", 28}; s.who(); //我叫张三,今年28岁 //c++ 中使用结构体 return 0; }

联合体

和C一样联合体中包含的若干个成员, 它们的内存是共享的, 使用它是为了节省内存C++ 中定义联合体, 可以省略union关键字 union XX{....}; XX x; //定义联合体类型变量直接省略union 支持匿名联合 union { //没有名字 .... }; #include <iostream> #include <cstdio> using namespace std int main(void) { // 两个成员变量都各占4个字节, 那么整体也占4个字节, ui和uc共享同一块内存 union { //匿名联合 unsigned int ui; unsigned char uc[4]; } // 没有联合体的名字, 可以直接使用这两个成员 // 把这两个变量看做主函数中的两个局部变量, 又符合联合体的规则 ui=0x12345678; // uc里面的4个元素就应该对应着ui的每一个字节的数据, 两个16进制数对应一个字节, 一个16进制数代表4个比特位,两个是8个比特位,正好一个字节 // 小端系统, 数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中 // ui里数值的高位应该是12, 低位应该是78 printf("0x%x\n", uc[0]); //0x78 printf("0x%x\n", uc[1]); //0x56 printf("0x%x\n", uc[2]); //0x34 printf("0x%x\n", uc[3]); //0x12 }

枚举

和C一样用枚举是为了提高代码的可读性C++ 中定义枚举类型变量, 可以省略enum关键字 enum XX{.....}; XX x; //定义联合体类型变量可以直接省略enum C++中枚举是独立的数据类型, 不能当做整数类型数使用, 之前C中, 枚举可以理解为一个常数的列表, 或常数集和, 是可以当做一个整数类型数据使用的. enum STATE{SLEEP, RUN, STOP}; STATE state; state = 1; //C中ok, C++中error state = RUN; //C, C++中都ok #include <iostream> using namespace std; int main(void) { // 声明枚举类型的时候可以指定它的数值, 不指定的话它默认是递增的 enum Color {RED , BLUE, YELLOW}; cout << RED << ',' << BLUE << ',' << YELLOW << endl; //0,1,2 Color c; // c = 1; //这样的代码在c++中不规范, 要枚举类型的目的就是替换那些常数, 直接写个c =1 , 别人还得猜1代表啥. //所以 在c++中 把枚举类型看做独立类型了, c =1 这行编译这个会类型报错, 从int到color类型非法转换. c = BLUE; cout << c << endl; // 1 return 0; }
最新回复(0)