一文梳理struct、union、class区别

struct和class区别

  1. 关于函数:在C语言中,定义是面向过程的,所以,数据和操作都是分开的,C语言中的struct不能写函数,而C++中则可以
  2. 关于继承:继承只能是在C++中,struct 默认的是public,而class 默认的是private,在c++ 的class中,数据是具有隐私的,默认情况下,不能让其他人进行访问的。构造函数必须是public的。

struct和union区别

  1. 储存:编译器会对struct每个成员分配内存,而union则只会对最后一个成员进行储存,所用成员共享内存。
  2. 修改值:对于union来说,修改成员的值时,由于共享内存,会对其他成员进行重写,而struct则互不影响。
    #include<iostream>
    using namespace std;
    union A
    {
    	int a;
    	int b;
    };
    int main()
    {
    	cout << "union A 的大小是:" << sizeof(A) <<"字节"<< endl;
    	A a;
    	a.a = 0;
    	cout << "a = " << a.a << ", b = "<<a.b << endl;
    	a.b = 1;
    	cout << "a = " << a.a <<", b = " << a.b << endl;
    	return 0;
    }

  3. 内存对齐方式:对于union来说呢,占用的内存是最大类型,同时要考虑对齐方式,应该是对齐字节的整数倍;
    #include<iostream>
    using namespace std;
    union A
    {
    	char a[13];
    	int b;
    };
    int main()
    {
    	cout << "union A 的大小是:" << sizeof(A) <<"字节"<< endl;
    	return 0;
    }

    1. 对齐方式是int的4字节,最大的内存是13,所以结果是16

  4. struct按照顺序放置元素,每次期望下一个采用上一个的内存大小,如果不够,则增加。

  5. #include<iostream>
    using namespace std;
    struct s1
    {
    	char a;
    	double b;
    	int c;
    	char d;
    };
    
    struct s2
    {
    	char a;
    	char b;
    	int c;
    	double d;
    };
    int main()
    {
    	cout << sizeof(s1) << endl; // 24
    	cout << sizeof(s2) << endl; // 16
    	return 0;
    }

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖无为

感谢你们的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值