【独学C言語】構造体とポインタ

※この記事は「2021年5月2日」に更新しました。

構造体とポインタについて。

前回、構造体とはどんなものかざっくりと説明しました。

【独学C言語】構造体とは

【独学C言語】構造体とは

2020年5月5日

今回は、構造体でポインタを使う方法やアロー演算子について。

SE、Web制作、販売を経験した管理人が解説します。

構造体とポインタ

構造体でもポインタを使うことができます。

例えば、以下のような構造体を宣言します。

typedef struct person
{
    int no;
    chr name[20];
}Person

次に main関数内で Person型(構造体)を定義して、ポインタ変数も定義します。

Person member;
Person *p_member;

そして、以下の処理で p_member に member のアドレスを格納します。

p_member = &member;

アロー演算子

先程の p_member(ポインタ変数)を使って no(構造体のメンバ)に値を入れる場合、どうすれば良いでしょうか。

構造体でなければ、*(アスタリスク)を使って、参照することができそうですが、これだとどのメンバかわかりません。

そこで、アロー演算子が登場します。

p_member->no = 1;

このように書けば、member の中の no に値を代入することができます。

アロー演算子は、*(アスタリスク)と .(ドット)を合わせたような演算子です。

構造体でポインタを使用して値を参照する場合、アロー演算子を使うようにしましょう。



サンプルプログラム【C言語】

構造体とポインタを理解するためのサンプルプログラムです。

sample1.c というソースファイルを作成します。

#include <stdio.h>

typedef struct Person
{
    int no;
    char name[20];
    int age;
}Person;

void custom_no(Person *);
void display(Person);

int main(void)
{
    int cnt;
    Person data;

    printf("\n");

    printf("Input No : ");
    scanf("%d", &data.no);

    printf("Input Name : ");
    scanf("%s", &data.name[0]);

    printf("Input age : ");
    scanf("%d", &data.age);

    custom_no(&data);

    printf("\n");
    display(data);
    printf("\n\n");

    return 0;
}

void custom_no(Person *p_data)
{
     p_data->no += 1000;

     return;
}

void display(Person d_data)
{
    printf("Custom No.%d %s %d", d_data.no, &d_data.name[0], d_data.age);

    return;
}

前回の記事で紹介したものと似たようなものにしています。

今回は、アロー演算子を使うことが目的なので、登録するデータは 1件のみです。

バリデーションも行っていません(名前入力で20文字以上入力しないようにして下さい)。

custom_no 関数に構造体である data のアドレスを渡しています。

目的は、no の値に 1000 加算することなので、アロー演算子を使っています。

あとは、出力を display 関数で行っています。

実行結果は以下の通りです。

構造体とポインタ

独学C言語について【おまけ】

タカフミブログの独学C言語シリーズは、C言語を独学するということを目的に記事を書いています。

他の記事に興味がある方は以下をご参照下さい。

C言語に関する記事一覧

C言語は、古典的なイメージがある方もいるかもしれませんが、他の多くのプログラミング言語のベースになっています。

実際に本格的なソフトを開発するとなるとなかなか大変ですが、とにかくハードウェアのリソースが少なくても高速に動くのが最大のメリットです。

プログラマーや SE(システムエンジニア)を目指す方は一度お試し下さい。

最後に【構造体とポインタについて】

いかがでしょうか。

今回は、構造体とポインタについて、紹介しました。

次回は、ダブルポインタについて、解説していきます。

【独学C言語】ダブルポインタとは

【独学C言語】ダブルポインタとは

2020年5月11日

アロー演算子は、優先順位を理解している場合 .(ドット)と *(アスタリスク)を使って、括弧も使用すれば実現できます。

しかし、見た目がわかりづらく、記述ミスの危険性も高くなります。

構造体でポインタを使う場合は、アロー演算子を使うと覚えておきましょう。