C++:联合类型(union)
2015-01-13 16:14
393 查看
联合类型(union):允许不同的数据类型访问相同的的,
因为实际上他们就是在内存中相同的位置,
声明和结构体差不多。和结构体的区别是
结构体中的数据元素之间有相互联系,而
联合中的数据元素是没有必然的联系的,是相互独立的。
用了其中一个元素,另外的也就不能使用了。否则运行时会出错误。
当我们这么写时,它会顺利的输出zhang san。但是,
我们这么写时,虽然编译是没有错的,但是运行就会报错而停止。
原因是这些数据类型是在相同的内存位置,你已经用name 的char类型占用了
这片内存空间,再用age去使用,是肯定有问题的。
因为实际上他们就是在内存中相同的位置,
声明和结构体差不多。和结构体的区别是
结构体中的数据元素之间有相互联系,而
联合中的数据元素是没有必然的联系的,是相互独立的。
用了其中一个元素,另外的也就不能使用了。否则运行时会出错误。
#include<iostream> using namespace std; union student{ const char *name; int age; }s; int main(int argc, char const *argv[]) { s.name = "zhang san"; cout << s.name << "\n" ; return 0; }
当我们这么写时,它会顺利的输出zhang san。但是,
#include<iostream> using namespace std; union student{ const char *name; int age; }; student s; int main(int argc, char const *argv[]) { s.name = "zhang san"; s.age = 18; cout << s.name << "\n" ; return 0; }
我们这么写时,虽然编译是没有错的,但是运行就会报错而停止。
原因是这些数据类型是在相同的内存位置,你已经用name 的char类型占用了
这片内存空间,再用age去使用,是肯定有问题的。
相关文章推荐
- 第六讲:c/c++复合数据类型struct以及联合类型union,动态内存申请malloc和calloc
- 学点 C 语言(28): 数据类型 - 联合(union)
- 如何在C#中模拟C++的联合(Union)?[C#, C++]
- 如何在C#中模拟C++的联合(Union)?[C#, C++]
- 如何在C#中模拟C++的联合(Union)?[C#, C++] How To Simulate C++ Union In C#?
- 第二十五章补充内容 12联合数据类型union
- C语言的联合(union)类型(27)
- 【C/C++】C语言中一些容易被人忽略的东西 之三 【共用体、联合、union】
- 如何在C#中模拟C++的联合(Union)?[C#, C++]
- 谈谈联合类型union的使用
- [C++基础]038_联合类型声明位置对其值的影响
- C/C++联合(Union)浅谈
- C语言数据类型:联合(union)
- C/C++中关于结构(struct)和联合(union)的简单介绍
- 联合类型(union type )
- enum枚举类型与union联合类型
- C++学习笔记(七)--联合/共用体(union)用法
- union联合 数据类型 详细说明
- union联合 数据类型 详细说明
- C/C++联合(Union)浅谈 .