iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0

今天我們來講共同空間~


共同空間

共同空間 (union)型態也稱為聯合或者是同位,它和結構的使用方式類似,都可以使用不同型熊的資料,而共同空間則是利用一塊共用的空間來存放資料。舉例來說,在日常生活中我們常會填寫一些表格,如果直接將這些表格以電腦化的方式輸入,有些欄位就會遇到不用填或是要填其它內容的情況,此時共同空間就可以發揮它的功用。

1.共同空間的定義及宣告

共同空間的定義及宣告方式與結構相同,其格式如下:

union 共同空間型態
{
    資料型態 欄位型態1;
    資料型態 欄位型態2;
          ...
    資料型態 欄位型態n;
};
union 共同空間型態 變數1, 變數2,...,變數m; 

共同空間的定義以關鍵字unoin為首,union後面所接續的識別字,即為自訂的共同空間型態名稱;而左、右大括號所包圍起來的內容,就是共同空間裡面的各個欄位,由於每個欄位的型態可能不同,所以各欄位就如同一般的變數宣告方式一樣,要定義其所屬型態。除了前面所使用的宣告格式外,也可以使用下列的格式來共同空間:

union 共同空間型態
{
    資料型態 欄位名稱1;
    資料型態 欄位型態2;
          ...
    資料型態 欄位名稱n;
} 變數1,變數2,...,變數m;

如果想在定義結構內容之後直接宣告該結構的變數,就可以使用第二個定義格式,這兩種定義及宣告格式的效果是相同的。

2.共同空間的使用及初值的設定

雖然共同空間變數內部定義許多,但是這些資料型態卻不是同時存在的,使用時他們只能有一個欄位存在於共同空間變數,也就是說,若是使用欄位A,就無法再使用其他的欄位,如果使用者執意要存放資料,就會造成資料被覆蓋的情況。下面的程式是以性別決定輸入的資料,我們以共同空間為例說明:
https://ithelp.ithome.com.tw/upload/images/20241002/201694107Sx0Ja8WZA.jpg

//prog11_8,共同空間的使用 
#include <iostream>
#include <cstdlib>
using namespace std; 
union mydata{                //定義共同空間
	char grade;
	int score;
}student;                    //宣告共同空間變數 
int main(void){
	char sex;
	do{
		cout << "Your sex is (1)male (2)female:";  //輸入性別 
		cin.get(sex);
		cin.get();                                 //清除換行符號,避免影響後續輸入 
	}
	while((sex>'2')||(sex<'1'));         // 如果使用者輸入的值不是 '1' 或 '2',則重新要求輸入 
	if(sex=='1'){
		cout << "Input score:";
		cin >> student.score;
	}
	else{
		cout << "Input grade:";
		cin.get(student.grade);
	}
}

程式中定義mydata型態的共同空間,包括等級與分數二個欄位,同時宣告該型態之共同空間變數student。由於grade與score只會有一個存在,所以考以定義成共同空間型態,如此一來可以節省不必要的記憶體空間。


今天先到這邊~謝謝大家!


上一篇
Day17 結構
下一篇
Day19 列舉型態
系列文
用30天學習C++26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言