iT邦幫忙

2021 iThome 鐵人賽

DAY 16
0
Software Development

0基礎也看得懂的程式設計-30天學會C語言系列 第 16

30天學會C語言: Day 15-奇怪的資料型態

C語言中還有另外兩種類似 struct 的指令

union

struct 一樣可以由多個不同型別的成員組成,但 同一時間只能儲存一個資料,或者可以說雖然可以用不同的成員名稱取得其中的資料,但實際上不管用哪個名稱都會得到同一個數值

union <名稱>{
	<成員型別> <成員名稱>;
		⋮
};

下面的程式碼建立一個叫 Dataunion,有兩個成員 n, f

union Data{
	int n;
	float f;
};

用大括號指派數值,但只能有一個值,且不管用哪個成員名稱存取都會得到同一筆資料(以二進位來說一樣,因為整數和浮點數在二進位中的表達方式不同,所以 %d%f 會得到不同的十進位數值)

#include<stdio.h>
#include<stdlib.h>

union Data{
	int n;
	float f;
};

int main(){
	union Data data={5};
	printf("%d %f\n", data.n, data.f);
}

透過成員名稱修改數值,同樣不管用哪個成員名稱存取都會得到同一筆資料

#include<stdio.h>
#include<stdlib.h>

union Data{
	int n;
	float f;
};

int main(){
	union Data data={5};
	printf("%d %f\n", data.n, data.f);
	data.n=10;
	printf("%d %f\n", data.n, data.f);
	data.f=50;
	printf("%d %f\n", data.n, data.f);
}

enum

用來產生多個整數常數的指令,語法是

enum <名稱> {<成員名稱>, <成員名稱>, ...};

如果不另外指派,成員的數值預設由0開始依序遞增,第一個成員是0,第二個是1以此類推

下面的程式碼會建立七個常數,依序是0到6

#include<stdio.h>
#include<stdlib.h>

enum week{Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};

int main(){
	printf("%d %d %d", Monday, Tuesday, Sunday);
	return 0;
}

如果指定第一個成員為1,成員的數值變成1~7

#include<stdio.h>
#include<stdlib.h>

enum week{Monday=1, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};

int main(){
	printf("%d %d %d", Monday, Tuesday, Sunday);
	return 0;
}

只要是沒有被指派值的成員,就會自動分配到數值,且為上一個成員加一
下面的例子中,Monday是1,但因為 Tuesday 是0,所以之後的成員依序是1, 2, 3, 4, 5

#include<stdio.h>
#include<stdlib.h>

enum week{Monday=1, Tuesday=0, Wednesday, Thursday, Friday, Saturday, Sunday};

int main(){
	printf("%d %d %d", Monday, Tuesday, Sunday);
	return 0;
}

A 是1,所以 B, C 是2, 3,但因為 D 有被指派,所以 D 是1,後面依序是2, 3

#include<stdio.h>
#include<stdlib.h>

enum week{A=1, B, C, D=1, E, F};

int main(){
	printf("%d %d %d %d %d %d", A, B, C, D, E, F);
	return 0;
}

雖然這個東西看似很廢,但它的用途可是
.
.
.
.
.
我也不知道?,觀迎各位前輩指點


上一篇
30天學會C語言: Day 14-全部包軌!
下一篇
30天學會C語言: Day 16-你可能會用到的函式
系列文
0基礎也看得懂的程式設計-30天學會C語言30

尚未有邦友留言

立即登入留言