構造体ポインタで文字列の代入ができない…
構造体でポインタを使う方法を知りたい!
この記事を読めば、これらの悩みを解決できます。
過去に通常の構造体を解説しているので、こちらも参考にしてください。
構造体でポインタを使うには?(重要なこと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をインクルードすることです。忘れないように気を付けましょう。
構造体ポインタを練習してみよう!
実際にプログラムを書いて練習してみましょう。
name | height | weight |
Mark | 165.4 | 47.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を使うところに気を付けましょう。
コメント