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;
}

虽然这个东西看似很废,但它的用途可是
.
.
.
.
.
我也不知道?,观迎各位前辈指点


<<:  Day16# Channel

>>:  30天学会 Python: Day 15-用文字才好懂

JavaScript物件初步概念

JavaScript是物件导向程序语言。物件导向程序设计,是模拟真实世界事物所发展出来的。在真实世界...

DAY 5:Thread-Per-Message Pattern,预备...发射!

在 DAY 2~DAY 4 我们使用到了 goroutine、lock、channel,主要目标在保...

[Day 15] ML 实验管理 — 翻开覆盖的陷阱卡~ 记帐小本本!

All life is an experiment. The more experiments y...

{DAY 28} Matplotlib 绘图2

前言 这篇文章会延伸昨天所学 改变参数的使用 并且画出更多的图表 文章内容分别是 3. 折线图、散布...

陆剧线上看

陆剧线上看 Qa6drama在线免费网站观看海量高清最新电影电视剧,绝对让你体验到追剧零时差的体验。...