構造体というのは、型がそれぞれ違う変数を複数扱う場合において便利な仕組みです。下記の記述のように、最初にtypedefによって構造体を宣言する事が基本になります。構造体にぶら下がる形で要素を定義して行きます。結果的に構造体そのものをコピーする事により、構造体にぶら下がっている要素すべてをコピーできるという利点があります。住所録などの扱いには非常に重宝出来る仕組みだと思います。当然同じように、関数での受け渡し、ポインタ、配列それぞれで使う事が出来ます。
typedef struct{
char name[256];
int age;
int sex;
}People;
void InputPeople(People *data); //ポインタ変数定義
void PrintPeople(People data); //通常変数定義(表示だけ)
int main(int argc, const char * argv[])
{
People data[3]; //data構造体を配列定義
int i;
for (i = 0;i < 3;i++){
InputPeople(&data[i]);
} //入力を3回繰り返す
for (i = 0;i < 3;i++){
PrintPeople(data[i]);
} //表示を3回繰り返す
return 0;
}
void InputPeople(People *data){
printf("名前:");
scanf("%s",data->name);
printf("年齢:");
scanf("%d",&data->age);
printf("性別:");
scanf("%d",&data->sex);
printf("\n");
}
void PrintPeople(People data){
char sex[16];
printf("名前:%s\n",data.name);
printf("年齢:%d\n",data.age);
if (data.sex == 1 ) {
strcpy(sex,"男性");
} else {
strcpy(sex,"女性");
}
printf("性別:%s\n",sex);
printf("\n");
}
やってて思いますが、やっぱり実際にコードを確認しながら数字がどう変化するかをみて行くのが一番頭に入って来る感じがします。ただ、サンプルコードは、単純なデータを受け渡す表現しか出来ないので、これがどのように応用されるのか、実際に市場に出回っているプログラムはどのような表現でコードを書いていて、どういう動きをしているのかが分かれば、もっと頭に入って来るのだろうなと思いました。
しかし未だにポインタ変数の記述方法などがごっちゃになってしまい、↓こういうの
int *p ,i;
p = &i; //iのアドレスをポインタ変数pに代入
*p = 1; //通常変数モードに切り替えたポインタ変数pに代入
printf(" p= %p\n", p); //ポインタ変数xを表示
printf(" i = %d\n",i);
printf(“*p= %d\n", *p); //通常変数モードxを表示
参考文献を読まないとエラーになってしまう事が多いので、まだまだ頭にしみ込んでいないのだなぁと思いました。
From ゆづ
0 件のコメント:
コメントを投稿