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

C言語の構造体へのポインタとは?宣言・アクセス方法を実例付きで解説

C言語において、構造体へのポインタとは、構造体全体の先頭アドレスを格納するポインタのことです。構造体へのポインタを使うことで、連結リスト(リンクリスト)、木構造(ツリー)、グラフといった複雑なデータ構造を効率的に扱えるようになります。

また、ポインタ経由で構造体のメンバにアクセスする際には、アロー演算子(->)と呼ばれる特殊な演算子を使用します。

構造体へのポインタの宣言

C言語で構造体へのポインタを宣言する書式は以下の通りです。

struct tagname *ptr;

具体例として、student構造体へのポインタは次のように宣言します。

struct student *s;

メンバへのアクセス方法

ポインタが指す構造体のメンバにアクセスするには、アロー演算子(->)を次のように使います。

ptr->membername;

たとえば、sが構造体へのポインタであれば、次のように各メンバへアクセスできます。

s->sno, s->sname, s->marks

サンプルプログラム1:学生情報の入出力

次のプログラムは、構造体へのポインタの基本的な使い方を示したものです。

#include<stdio.h>
struct student{
    int sno;
    char sname[30];
    float marks;
};
main ( ){
    struct student s;
    struct student *st;
    printf("enter sno, sname, marks:");
    scanf ("%d%s%f", & s.sno, s.sname, &s. marks);
    st = &s;
    printf ("details of the student are");
    printf ("Number = %d\n", st ->sno);
    printf ("name = %s\n", st->sname);
    printf ("marks =%f\n", st ->marks);
    getch ( );
}

実行結果

上記のプログラムを実行すると、次のような結果が出力されます。

enter sno, sname, marks:1 Lucky 98
details of the student are:
Number = 1
name = Lucky
marks =98.000000

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

サンプルプログラム2:person構造体での活用例

続いて、もう一つの例を見てみましょう。このプログラムでは、ポインタ経由で直接メンバに入力値を読み込んでいます。

#include<stdio.h>
struct person{
    int age;
    float weight;
};
int main(){
    struct person *personPtr, person1;
    personPtr = &person1;
    printf("Enter age: ");
    scanf("%d", &personPtr->age);
    printf("Enter weight: ");
    scanf("%f", &personPtr->weight);
    printf("Displaying:\n");
    printf("Age: %d\n", personPtr->age);
    printf("weight: %f", personPtr->weight);
    return 0;
}

実行結果

このプログラムを実行すると、以下のような結果になります。

Enter age: 45
Enter weight: 60
Displaying:
Age: 45
weight: 60.000000

このように、scanf関数でも「&personPtr->age」のようにアロー演算子と組み合わせてメンバのアドレスを渡すことができ、ポインタ経由で構造体のデータを自在に操作できることがわかります。


  1. C言語のシフト演算とは?左シフト・右シフト・補数の基本をわかりやすく解説

    問題 C言語を使用して、ある数値に対する左シフト・右シフト・補数(ビット反転)を求める簡単なプログラムを作成するには、どのようにすればよいのでしょうか。 解決方法 左シフト(<<) 変数の値を1ビットだけ左へシフトすると、その値は2倍になります。「a × 2」を計算したのと同じ結果です。 例:a = 10 の場合、a << 1 = 20 右シフト(>>) 変数の値を1ビットだけ右へシフトすると、その値は元の半分になります。「a ÷ 2」の整数除算と同じ結果です。 例:a = 10 の場合、a >> 1 = 5 サンプルプログラム 以下は、シ

  2. C言語の基本データ型を徹底解説!int・char・floatの種類とサイズ一覧

    C言語の基本データ型とは? C言語のコンパイラがサポートする基本データ型は、大きく分けて次の4つです。 整数型(Integer) 文字型(Character) 浮動小数点型(Floating-point) 倍精度浮動小数点型(Double precision floating point) プログラムで扱う値の種類(整数・文字・実数など)に応じて適切な型を選ぶことは、正確で効率的なコードを書くための第一歩です。なお、各データ型のサイズや表現できる値の範囲は、使用するコンパイラや実行環境によって異なる場合がある点に注意してください。 整数型(Integral Data Type) 整数型は