C言語 | 構造体の宣言 | 構造体 - struct
構造体は、異なる型の値を1つのオブジェクトにまとめる。
構造体の定義
struct を使って関連するメンバーを定義する。
struct タグ名 {
型 メンバー1;
型 メンバー2;
};
タグ名でインスタンスを作成し、. でメンバーへアクセスする。
コード1
#include <stdio.h>
struct Point { int x , y; };
int main() {
struct Point pt = { 100 , 50 };
printf("pt.x = %d : pt.y = %d\n" , pt.x , pt.y);
return 0;
}
各インスタンスは独立した記憶領域を持つ。
struct Point pt1 = { 100 , 50 };
struct Point pt2 = { 200 , 100 };

無名構造体はタグ名を省略するため、宣言した場所でだけ利用できる。
struct { int x , y; } pt = { 100 , 35 };
構造体の代入
同じ型の構造体は代入できる。すべてのメンバーがコピーされる。
コード2
#include <stdio.h>
struct Point { int x , y; };
int main() {
struct Point pt1 = { 200 , 100 } , pt2 = { 0 };
pt2 = pt1;
printf("pt2.x = %d : pt2.y = %d\n" , pt2.x , pt2.y);
return 0;
}
構造体は関数の引数や戻り値にも利用できる。
コード3
#include <stdio.h>
struct Point { int x , y; };
struct Point sizeToPoint(struct Point origin , int width , int height) {
struct Point result = { origin.x + width , origin.y + height };
return result;
}
int main() {
struct Point location = { 100 , 100 };
printf("Right = %d\n" , sizeToPoint(location , 200 , 40).x);
return 0;
}
大きな構造体を値渡しするとメンバーがコピーされる。コピーが不要ならポインターを使う。