構造体(C)
構造体について。
構造体の作成
struct 構造体タグ名{ //データ }
普通関数よりも先に宣言する
新しく名前をつける
struct animals_tag { char animal[64]; char name[64]; int old; int weight; }; typedef struct animals_tag animals; /* typedef データ型 新しい名前 */
一度に宣言できる
typedef struct animals_tag { char animal[64]; char name[64]; int old; int weight; } animals;
新しい型が定義できれば構造体タグ名を省略できる?
typedef struct { char animal[64]; char name[64]; int old; int weight; } animals;
構造体のポインタを構造体要素に持つときは省略できない
(構造体の宣言が終了していないから?)
構造体変数では要素を名前で区別する
#include <stdio.h> struct animals_tag { char animal[64]; char name[64]; int old; int weight; }; int main(void){ struct animals_tag data; data.old = 5; printf("%d歳", data.old); return 0; } /*5歳*/
文字列を扱うならstrcpy
#include <stdio.h> #include <string.h> struct animals_tag { char animal[64]; char name[64]; int old; int weight; }; int main(void){ struct animals_tag data; strcpy(data.animal, "ねこ"); printf("%s", data.animal); return 0; } /*ねこ*/
表示してみる
#include <stdio.h> #include <string.h> typedef struct { char animal[64]; char name[64]; int old; int weight; } animals; void animals_print(animals data); int main(void){ animals data; strcpy(data.animal,"ねこ"); strcpy(data.name, "きなこ"); data.old = 2; data.weight = 5; animals_print(data); return 0; } void animals_print(animals data){ printf("種類:%s\n", data.animal); printf("名前:%s\n", data.name); printf("年齢:%d歳\n", data.old); printf("体重:%dkg\n", data.weight); return; } /* 種類:ねこ 名前:きなこ 年齢:2歳 体重:5kg */
構造体の注意
○構造体変数同士での演算、比較はできない
○配列が含まれているとき、中身がコピーされる