工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C言語 構造体とポインタ: 実践ガイド

C言語 構造体とポインタ: 実践ガイド

ポインタで構造体メンバーを操作し、動的メモリ確保で柔軟なCデータ構造を構築する方法を学びます。

構造体とポインタに入る前に、以下の基礎トピックを確認してください:


ポインタで構造体を参照する

構造体とそれを指すポインタの宣言例を簡潔に示します。

struct Person {
    int member1;
    int member2;
    /* 追加メンバー */
};
int main(void) {
    struct Person *ptr, harry;
    /* ptrは任意のPersonインスタンスを指せる */
}

このスニペットでは、ptrはstruct Personインスタンスへのポインタです。


例: ポインタ経由で構造体メンバーにアクセス

ポインタ経由で構造体フィールドを読み書きするには、->演算子を使います。

#include <stdio.h>
struct Person {
    int age;
    float weight;
};
int main(void) {
    struct Person *personPtr, person1;
    personPtr = &person1; /* person1を指す */
    printf("Enter age: ");
    scanf("%d", &personPtr->age);
    printf("Enter weight: ");
    scanf("%f", &personPtr->weight);
    printf("\nDisplaying:\n");
    printf("Age: %d\n", personPtr->age);
    printf("Weight: %f", personPtr->weight);
    return 0;
}

ここでは、personPtr = &person1;でperson1のアドレスをpersonPtrに格納します。以降、personPtr->fieldでのアクセスは(*personPtr).fieldと等価で、簡潔な構文を提供します。


構造体の動的メモリ確保

コンパイル時に必要な構造体インスタンス数が不明な場合、C標準ライブラリで実行時にメモリを確保します。

例: 構造体配列の確保

#include <stdio.h>
#include <stdlib.h>
struct Person {
    int age;
    float weight;
    char name[30];
};
int main(void) {
    struct Person *ptr;
    int i, n;
    printf("人数を入力: ");
    scanf("%d", &n);
    ptr = (struct Person*)malloc(n * sizeof(struct Person));
    if (!ptr) {
        fprintf(stderr, "Memory allocation failed\n");
        return EXIT_FAILURE;
    }
    for (i = 0; i < n; ++i) {
        printf("名前と年齢を入力: ");
        scanf("%s %d", (ptr + i)->name, &(ptr + i)->age);
    }
    printf("\nDisplaying Information:\n");
    for (i = 0; i < n; ++i) {
        printf("Name: %s\tAge: %d\n", (ptr + i)->name, (ptr + i)->age);
    }
    free(ptr);
    return 0;
}

実行結果:

人数を入力: 2
名前と年齢を入力: Harry 24
名前と年齢を入力: Gary 32
Displaying Information:
Name: Harry Age: 24
Name: Gary Age: 32

この例は、ヒープ上にstruct Personのnインスタンスを作成し、ユーザー入力を各々に読み取り、結果を表示する流れを示しています。

C言語

  1. C# キーワードと識別子:ルール、一覧、ベストプラクティス完全ガイド
  2. C# クラスとオブジェクト:堅牢な OOP の基礎
  3. C# 抽象クラスと抽象メソッドをマスターする:実践ガイド
  4. C# 部分クラスと部分メソッドを理解する
  5. C# sealed クラスとメソッドをマスターする:使用判断、実例、コードの安全性とパフォーマンス向上
  6. C#構造体(struct)完全ガイド:定義、活用、クラスとの違い
  7. C言語キーワードと識別子:実践ガイド
  8. C言語ポインタ完全マスター: 実践的エキスパートガイド
  9. C言語における配列とポインタの関係を理解する
  10. C言語: アドレスとポインタを関数に渡す – 実践ガイド
  11. C言語 構造体 完全マスター: 定義・変数・アクセス・高度な例