Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語の構造体ポインタを具体例でわかりやすく解説

構造体ポインタ(ポインタ構造体)とは、構造体全体の先頭アドレスを保持するポインタのことです。C言語において、構造体ポインタは主に連結リスト木構造(ツリー)グラフといった複雑なデータ構造を実装する際に活用されます。

構造体ポインタが指し示すメンバーにアクセスするには、アロー演算子(->)と呼ばれる特別な演算子を使用します。

構造体ポインタの宣言

構造体へのポインタは、以下のように宣言します。

struct タグ名 *ポインタ変数名;

例えば、次のように記述します。

struct student *s;

これにより、構造体 student 型の変数のアドレスを格納できるポインタ s が定義されます。

メンバーへのアクセス方法

構造体ポインタから各メンバーにアクセスするには、アロー演算子を使用します。書式は以下の通りです。

ポインタ変数名->メンバー名;

例えば、次のようにアクセスできます。

s->sno、s->sname、s->marks

これは (*s).sno のように間接参照演算子とドット演算子を組み合わせて書くことも可能ですが、アロー演算子の方が簡潔で読みやすいため、一般的に使われています。

サンプルプログラム

以下は、構造体ポインタを使用したC言語プログラムの例です。

#include<stdio.h>

struct student {
    int sno;
    char sname[30];
    float marks;
};

int main(void) {
    struct student s;
    struct student *st;

    printf("enter sno, sname, marks:");
    scanf("%d%s%f", &s.sno, s.sname, &s.marks);

    st = &s;  /* 構造体変数sのアドレスをポインタstに代入 */

    printf("details of the student are\n");
    printf("Number = %d\n", st->sno);
    printf("name = %s\n", st->sname);
    printf("marks = %f\n", st->marks);

    return 0;
}

このプログラムでは、まず構造体変数 s を宣言し、そのアドレスを構造体ポインタ st に代入しています。その後、アロー演算子(->)を使って、学籍番号・氏名・点数の各メンバーにアクセスして表示しています。

実行結果

上記のプログラムを実行すると、以下のような出力が得られます。

enter sno, sname, marks:1 priya 34
details of the student are
Number = 1
name = priya
marks = 34.000000

まとめ

  • 構造体ポインタは、構造体全体のアドレスを保持する。
  • メンバーへのアクセスにはアロー演算子(->)を使用する。
  • 連結リストやツリーなど、動的なデータ構造の実装に不可欠な機能である。

構造体ポインタを理解することは、C言語で高度なデータ構造を扱うための第一歩です。ぜひ実際にコードを書いて、動作を確認してみてください。

  1. C言語におけるユニオンとポインタの使い方を徹底解説

    ユニオン(共用体)とは、異なるデータ型を持つ複数の変数が、同一のメモリ領域を共有するための仕組みです。構造体が各メンバーごとに独立したメモリを割り当てるのに対し、ユニオンではすべてのメンバーが同じアドレスを参照するという点が大きな特徴です。 ユニオンの構文 ユニオンを定義するときの基本的な書式は次の通りです。 union タグ名{ データ型 メンバー1; データ型 メンバー2; ---- ---- データ型 メンバーn; }; 実際の記述例を見てみましょう。 union sample{ int a; float b; char

  2. C言語のポインタ入門!宣言・初期化から配列アクセスの実例まで徹底解説

    ポインタ(pointer)とは、他の変数のメモリアドレスを格納するための変数です。C言語においてポインタは、メモリを直接操作したり、関数間でデータを効率的にやり取りしたりするために欠かせない重要な概念です。 ポインタの宣言・初期化とアクセス まず、次のような通常の整数変数の宣言を見てみましょう。 int qty = 179; 変数qtyには値「179」が格納されると同時に、メモリ上のどこかにその格納場所(アドレス)が割り当てられます。 ポインタの宣言 int *p; 「p」はポインタ変数であり、別の整数型(int)変数のアドレスを保持します。変数名の前にアスタリスク(*)を付けることで、「こ