|
发表于 2016-3-30 20:59:34
|
显示全部楼层
从语法上看,可以做参数或者返回值,但这样做没有意义而且会出错,本质是共用体要求在不同的时间才能存储不同的变量。
顾名思义,共用体是公用一块内存的,如果同时使用,比如导致覆盖问题。
如union UN{int val;char ch;}; 如果同时对val和ch赋值,必然导致ch的值覆盖了val的值,这样就没意义了,例子见下面代码。
- #include "stdafx.h"
- #include<iostream>
- using namespace std;
- union UN
- {
- int i_val;
- char ch;
- };
- void fun(UN & u)
- {
- cout<<u.i_val<<endl;
- cout<<u.ch<<endl;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- UN u;
- u.i_val=12;
- u.ch='a';
- cout<<u.i_val<<endl;
- cout<<u.ch<<endl;
-
- fun(u);
- cin.get();
- return 0;
- }
复制代码
输出结果不是12和a,而是97和a
因为对ch的赋值在后,因此该块内存存储的是十六进制数据:0000 0061;
打印的时候,先把这个数据当做int型来解释,打印十进制数97,;然后当做char型来解释,打印字母 a
|
|