構造体へのポインタも、ほかの型の場合と同じように作ることができる。
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 は同じ値を出力している。