struct 与 union 在C与C++中的区别
来源:互联网 发布:mysql front 5.3 注册 编辑:程序博客网 时间:2024/06/09 18:31
在C和C++中 struct 与 union 是非常相似的,只不过 union 共享存储区而已,共享的是数据变量所占空间最大的存储区,其他和struct一样。我举以下例子来说明union在C与C++中的区别:
我用的是VS2013编译器
struct与union的区别详解
struct与union的区别1. struct和union都是由多个不同的数据类型成员组成, 但在任何同一时刻, union中只存放了一个被选中的成员, 而struct的所有成员都存在。在struct中,各成员都占有自己的内存空间,它们是同时存在的。2. 一个struct变量的总长度等于所有成员长度之和。在Union中,所有成员不能同时占用它的内存空间,它们不能同时存在。Union变量的长度等于最长的成员的长度。3. 对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于struct的不同成员赋值是互不影响的。
一、在C中
//本代码在C中union Student//定义了一个Student联合体{ int a; int b; char c;};int main(){ union Student st;//定义Student联合体对象st //在C中注意这里定义对象时前要加 union st.a = 90; printf("st.a= %d\n", st.a);//90 st.b = 80; printf("st.a= %d\n", st.a);//此时st.a(90)已经被st.b(80)覆盖 printf("st.b= %d\n", st.b);//80 st.c = '0';//字符0的ASIIC值为48 printf("st.c= %c\n", st.c);//0 printf("st.a= %d\n", st.a);//48 printf("st.b= %d\n", st.b);//48 st.c = '1';//字符1的ASIIC值为49 printf("st.c= %c\n", st.c);//1 printf("st.a= %d\n", st.a);//49 printf("st.b= %d\n", st.b);//49 st.c = 'a';//字符a的ASIIC值为97 printf("st.c= %c\n", st.c);//a printf("st.a= %d\n", st.a);//97 printf("st.b= %d\n", st.b);//97 system("pause"); return 0;}
二、在C++中
//在C++中#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>using namespace std;union Student{ int a; int b; char c;};int main(){ Student st; st.a = 90; cout <<"st.a= "<< st.a <<endl;//90 st.b = 80; cout <<"st.a= "<< st.a <<endl;//此时st.a(90)已经被st.b(80)覆盖 cout << "st.b= " << st.b << endl;//80 st.c = '0';//字符0的ASIIC值为48 cout << "st.c= " << st.c << endl;//0 cout << "st.a= " << st.a << endl;//48 cout << "st.b= " << st.b << endl;//48 st.c = '1';//字符1的ASIIC值为49 cout << "st.c= " << st.c << endl;//1 cout << "st.a= " << st.a << endl;//49 cout << "st.b= " << st.b << endl;//49 st.c = 'a';//字符a的ASIIC值为97 cout << "st.c= " << st.c << endl;//a cout << "st.a= " << st.a << endl;//97 cout << "st.b= " << st.b << endl;//97 Student temp = st;//从中可以看出在C++中union也重载了= 操作符; cout << "temp.c= " << temp.c << endl;//a cout << "temp.a= " << temp.a << endl;//97 cout << "temp.b= " << temp.b << endl;//97 system("pause"); return 0;}
其他
若你还想了解有关于struct,class等知识请看一下博客:
struct结构在C和C++中的区别
struct 与 class的区别(在标准C++中)
1 0
- struct 与 union 在C与C++中的区别
- C中的struct与union
- C语言中struct与union的区别
- C语言中,struct与union的区别
- C语言中struct与union的区别
- struct 定义在C++与C中的区别
- struct(在C与C++中的区别)
- union 与 struct 区别
- C语言sizeof(struct)与sizeof(union)
- typedef struct与struct的区别(C语言中的)
- c Union 和 struct 区别
- C++:Struct 和 Union区别
- C与C++ struct区别
- struct 与 union 的区别
- union 与struct 区别简介
- union与struct的区别
- Union与Struct的区别
- union与struct的区别
- C++抽象编程——递归策略(3)——生成排列数(2)
- 【IMWeb训练营作业】组件化开发
- NS3实例分析second.cc_Building a Bus Network Topology
- CocoaAsyncSocket + Protobuf 处理粘包和拆包问题
- Linux用户必看:29个必须掌握的常用
- struct 与 union 在C与C++中的区别
- base64进行加密和解码
- TypeError: concat() got an unexpected keyword argument 'axis'
- 笔记本内存条怎么选?DDR3?DDR3L?
- leetcode两道题
- 临接表存图
- tolua#代码简要分析
- mac eclipse 配置ndk编译jni
- w3c网站