構造体へのポインタ

構造体へのポインタも、ほかの型の場合と同じように作ることができる。

struct s_type {
    int i;
    char str[80];
} s, *p;

上の例では、s_type という名前の構造体を定義し、その変数 s とポインタ p を宣言している。このとき p に s のアドレスを代入するには、

p = &s;

とする。これもほかの型の場合と一緒だな。
ただし、構造体へのポインタから構造体のメンバにアクセスするときは、ドット演算子ではなく、アロー演算子(->)を使う。

p->i = 100;

次のプログラムは、構造体へのポインタの使い方の簡単な例だ。

#include
#include

struct s_type {
    int i;
    char str[80];
} s, *p;

int main(void)
{
    p = &s;

    s.i = 10;
    p->i = 20;
    strcpy(p->str, "I like struct.");

    printf("%d %d %s\n", s.i, p->i, p->str);

return 0;
}

s_type 構造体の変数 s とポインタ p を宣言し、s のアドレスを p に代入しているので、p は構造体 s を指していることになる。
15 行目でドット演算子を使ってメンバに代入しているけど、次の行で今度はポインタからアロー演算子を使って違う値を代入している。結果として上書きしているわけだ。

takatoh@nightschool $ ./sample_10_2a
20 20 I like struct.

期待通り、s.i と p->i は同じ値を出力している。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください