C言語 入門 構造体ポインタで重要なこと5つ

C言語

構造体ポインタで文字列の代入ができない…

構造体でポインタを使う方法を知りたい!

この記事を読めば、これらの悩みを解決できます。

過去に通常の構造体を解説しているので、こちらも参考にしてください。

スポンサーリンク

構造体でポインタを使うには?(重要なこと5つ)

まずは、構造体でポインタを使う時に重要なことを5つまとめてみます。

構造体変数と構造体ポインタは同時に変数宣言

構造体ポインタで構造体変数のアドレスを参照

ドット演算子は使えないので、アロー演算子を使う

文字列の代入はstrcpy、strcpy_sを使う

(strcpyを使う時は、string.hをインクルード)

上から順に解説していきます。

構造体変数と構造体ポインタは同時に変数宣言

そもそも、「構造体でポインタを使う」とは「構造体ポインタを使う」という意味です。

構造体ポインタは、構造体変数と同じだと思ってもらって大丈夫です。ポインタを使うか変数を使うかの違いだけです。

また、ポインタを使うため、変数のアドレスを参照する必要があります。そこで構造体変数を使うことになります。構造体変数と構造体ポインタは、絶対に同時に変数宣言をするという決まりはありません。ただ、データ型が同じなので一緒に変数宣言した方が楽です。

INFO search,* p;

この後、構造体ポインタ「*p」は、構造体変数「search」のアドレスを参照します。

構造体ポインタで構造体変数のアドレスを参照

ここはポインタを使っているだけなので説明は省きます。ポインタを詳しく勉強したい人はこちらを参考にしてください。

p = &search;

これでアドレスの参照ができます。

ドット演算子は使えない?!(アロー演算子とは?)

構造体ポインタを扱うときに、ドット演算子を使うことはできません。

しかし、「構造体変数名.メンバー名」ではなく、「構造体変数名->メンバー名」(アロー演算子)で構造体メンバーを扱うことができます。

例えば、こんな感じで使います。

p->height=165.4;

文字列の代入はstrcpy、strcpy_sを使う

変数に数字を代入するときはいつも通りで大丈夫なのですが、文字列の代入はいつも通りだとエラーが出てしまいます。なので、「strcpy」を使いましょう。(Visual Studioだとstrcpy_s)

strcpy_s(p->name, "Mark");

こんな感じです。strcpyの使い方はこちらを参考にしてください。

strcpyを使う時に注意すべきところは、string.hをインクルードすることです。忘れないように気を付けましょう。

構造体ポインタを練習してみよう!

実際にプログラムを書いて練習してみましょう。

nameheightweight
Mark165.447.8

この情報に構造体を使ってみます。

#include<stdio.h>
#include<string.h>
struct INFO
{
    char name[10];
    float height;
    float weight;
};

int main()
{
    INFO search, * p;
    p = &search;
    strcpy_s(p->name, "Mark");
    p->height=165.4;
    p->weight=47.8;
    printf("name  :%s", p->name);
    printf("¥nheight:%.1f",p->height);
    printf("¥nweight:%.1f", p->weight);
}

これを出力してみます。

まとめ

構造体ポインタと言っても、構造体でポインタを使っているだけで、難しくはないです。文字列でstrcpyを使うところに気を付けましょう。