C言語 | 構造体宣言 | 構造体へのポインタ
構造体にもアドレスがあり、ポインタ経由でアクセスできます。
構造体メンバを間接参照する
構造体へのポインタは次のように宣言します。
struct Point *pointer = &pt;
メンバアクセス演算子を使う前にポインタを間接参照します。
int x = (*pointer).x;
#include <stdio.h>
struct Point {
int x;
int y;
};
int main(void) {
struct Point pt = { 100, 200 };
struct Point *ppt = &pt;
printf("pt.x = %d : pt.y = %d\n", (*ppt).x, (*ppt).y);
return 0;
}
アロー演算子を使うと短く書けます。
pointer->member
pointer->member は (*pointer).member と同じ意味です。
printf("pt.x = %d : pt.y = %d\n", ppt->x, ppt->y);
構造体全体のコピーを避けるため、関数には構造体へのポインタを渡すことがよくあります。
struct Point {
int x;
int y;
};
void SizeToPoint(struct Point *offsetPoint, struct Point *target,
int width, int height) {
target->x = offsetPoint->x + width;
target->y = offsetPoint->y + height;
}
呼び出し元は構造体のアドレスを渡し、関数は target を通じて計算結果を書き込みます。必要であれば、戻り値を成功または失敗の通知に使えます。