unionとかenum

共用体

  • 基本的には,データAとデータBは違うアドレスに置く
  • しかし,同じアドレスに置くこともできる
  • その操作を行うのが共用体で,unionというキーワードを用いる
例(共用体を使ってみる)

とりあえず,どんな感じで使うのか見てみる

#include <stdio.h>

int main(void){
	union sample{
		char 	ch;
		short 	sh;
		int	it;
	};

	union sample u1;
	
	u1.it = 0x12345678;
	printf("%x\n", u1.ch);
	printf("%x\n", u1.sh);
	printf("%x\n", u1.it);

	return 0;
}

上のファイルをコンパイルして実行すると以下の結果が得られる.

78
5678
12345678

確かに,1つの変数を触っただけなのに,他の変数の値も更新されている.

例(typedefと併用してみる)

unionはtypedefと一緒に使うことが多いそうなので,試してみる.

#include <stdio.h>

int main(void){
	typedef union sample{
		char 	ch;
		short 	sh;
		int	it;
	}smpl;

	smpl u1;
	
	u1.it = 0x12345678;
	printf("%x\n", u1.ch);
	printf("%x\n", u1.sh);
	printf("%x\n", u1.it);

	return 0;
}

変数を宣言するときに,いちいちunionと言わなくてよくなった.もちろん,結果はさっきと同じ.

どう使うのか?何がうれしいのか?

メモリの節約に関係しているそうだが,詳細は不明.いい例があったら今後追加する

列挙型データ

  • define ~をまとめて,見栄えをよくするための機能
  • つまり,定数をメンバにもつデータ型(構造体?)
  • 各定数の値はint型
  • enumというキーワードを用いる
例(enumを使ってみる)

とりあえず,どんな感じで使うのか見てみる

#include <stdio.h>

enum coltyp{  //値を指定しなければ上から0, 1, ... が割り振られる
	RED,
	BLUE,
	BLACK,
	WHITE
}color;

int main(void){
	color = BLUE;
	printf("%d\n", color);
	color = WHITE;
	printf("%d\n", color);

	return 0;
}

上のファイルをコンパイルして実行すると以下の結果が得られる.

0
1
3