libro
www.tuyano.com
Objective-C初心者のためのC言語超入門

プログラムの構造化 〜関数と構造体〜 (3/4)

作成:2011-02-05 21:25
更新:2011-02-05 21:25

■構造体とは?

関数は、プログラムの処理を切り分けて、構造的に整理していくことができました。では、さまざまな「」を構造的に組み立てる方法はないでしょうか。

例えば、それぞれの人の名前や年齢、メールアドレスといった情報をデータとしてまとめたいと思ったとしましょう。このとき、1つ1つのデータをそれぞれ別々の変数などに保管したのでは、正直、データを扱うのが面倒です。これが1人ならまだしも、何十人ものデータを管理するとなると、何が何だか分からなくなってしまうでしょう。

こういうときC言語では、いくつかの値をひとつの値としてまとめて定義することができます。そのために用意されているのが「構造体」というものです。この構造体は、以下のような形をしています。
typedef struct {
    型名 変数名;
    ……必要なだけ記述……
} 構造体名;
構造体は、このように「typedef struct」というものの後に{}記号をつけて、そこに値を保管するための変数の宣言を記述します。これは、いくつ記述してもかまいません。これで、いくつもの値をひとまとめにして管理する構造体が定義されます。

この構造体を利用するときには、変数の宣言をするとき、タイプとして構造体名を指定してやります。また、用意した各変数に設定する値を{}内にカンマで区切って記述してやります。
構造体名 変数 = { 値1, 値2, …… };
このような形ですね。これで、{}内に記述したそれぞれの値が、構造体内の変数に順番に設定されます。作成した構造体から値を取り出すときには、構造体を設定した変数名の後にドットをつけて変数名を記述してやります。「◯◯.△△」というような形ですね。これで、その構造体内の△△という名前の変数の値を取り出したり設定したりすることができるようになります。

この構造体は、実際のコードを見てみないと使い方がピンと来ないかも知れません。以下に、簡単な利用例をあげておきましょう。ここでは、「name」「age」「mail」という3つの変数を持った構造体「Person」を定義しています。

ここでは、構造体Personと、Personのデータを出力するprintPerson関数を定義しておきました。以下のようにしてPerson構造体の値を変数に設定しているのがわかります。
Person data1 = {"taro",30,"taro@yamada.com"};
Person data2 = {"hanako",24,"hanako@flower.jp"};
これで、data1data2に、Person構造体の値が作成されます。これらに保管されいてる値は、例えば「data1.name」「data2.age」というように指定して取り出すことができます。例えば、Person構造体を多数保管する配列を用意して、そこにデータを入れていけば、たくさんのPersonデータを保管し管理することができるようになりますね!

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

#include <stdio.h>

typedef struct {
	char* name;
	int age;
	char* mail;
} Person;

void printPerson(Person data){
	printf("name: %s\n",data.name);
	printf("age : %i\n",data.age);
	printf("mail: %s\n",data.mail);
	printf("\n");
}

int main (int argc, const char * argv[]) {
	Person data1 = {"taro",30,"taro@yamada.com"};
	Person data2 = {"hanako",24,"hanako@flower.jp"};
	printPerson(data1);
	printPerson(data2);
	return 0;
}

※関連コンテンツ

「Objective-C初心者のためのC言語超入門」に戻る