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

结构体

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值