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

C言語 構造体: 関数への渡し方・返し方・参照渡しをマスター

C言語 構造体: 渡し方、返し方、参照渡し

Cプログラミングでは、構造体で関連データを1つのエンティティにグループ化できます。このガイドでは、構造体の3つの重要な操作:関数への渡し方、関数からの返し方、参照による操作を解説します。各セクションに簡潔な説明と動作例を含め、理解を深めます。


構造体を関数に渡す

組み込み型と同様に、構造体変数を直接関数に渡せます。事前にC構造体、C関数、ユーザー定義関数を復習すると理解が深まります。

以下の例は、struct studentを関数に渡して内容を表示する方法を示します。

#include <stdio.h>
struct student {
    char name[50];
    int age;
};
// 関数プロトタイプ
void display(struct student s);
int main() {
    struct student s1;
    printf("Enter name: ");
    scanf("%[^ ]%%*c", s1.name); // 改行まで読み取り
    printf("Enter age: ");
    scanf("%d", &s1.age);
    display(s1); // 構造体を関数に渡す
    return 0;
}
void display(struct student s) {
    printf("\nDisplaying information\n");
    printf("Name: %s", s.name);
    printf("\nAge: %d", s.age);
}

出力

Enter name: Bond
Enter age: 13
Displaying information
Name: Bond
Age: 13

関数から構造体を返す

関数は構造体全体を返せるため、データ収集と処理をきれいに分離できます。以下の例では、関数内で学生情報を収集し、mainに返します。

#include <stdio.h>
struct student {
    char name[50];
    int age;
};
// 関数プロトタイプ
struct student getInformation();
int main() {
    struct student s;
    s = getInformation();
    printf("\nDisplaying information\n");
    printf("Name: %s", s.name);
    printf("\nAge: %d", s.age);
    return 0;
}
struct student getInformation() {
    struct student s1;
    printf("Enter name: ");
    scanf("%[^ ]%%*c", s1.name);
    printf("Enter age: ");
    scanf("%d", &s1.age);
    return s1;
}

関数の戻り値型が返す構造体と一致し、型安全性と明確性を確保しています。


構造体を参照渡しする

関数で構造体を変更する必要がある場合、そのアドレス(ポインタ)を渡します。これは組み込み型の参照渡しと同様です。以下の例では、2つの複素数を加算し、結果をポインタ経由で格納します。

#include <stdio.h>
typedef struct Complex {
    float real;
    float imag;
} complex;
void addNumbers(complex c1, complex c2, complex *result);
int main() {
    complex c1, c2, result;
    printf("For first number,\n");
    printf("Enter real part: ");
    scanf("%f", &c1.real);
    printf("Enter imaginary part: ");
    scanf("%f", &c1.imag);
    printf("For second number,\n");
    printf("Enter real part: ");
    scanf("%f", &c2.real);
    printf("Enter imaginary part: ");
    scanf("%f", &c2.imag);
    addNumbers(c1, c2, &result);
    printf("\nresult.real = %.1f\n", result.real);
    printf("result.imag = %.1f", result.imag);
    return 0;
}
void addNumbers(complex c1, complex c2, complex *result) {
    result->real = c1.real + c2.real;
    result->imag = c1.imag + c2.imag;
}

出力

For first number,
Enter real part: 1.1
Enter imaginary part: -2.4
For second number,
Enter real part: 3.4
Enter imaginary part: -3.2
result.real = 4.5
result.imag = -5.6

resultが参照渡しされているため、addNumbers内の変更が即座にmainの変数に反映されます。


これらの技法をマスターすれば、構造体の全威力を活用した、よりモジュール化され、読みやすく、効率的なCコードが書けるようになります。

C言語

  1. 電気変圧器の仕組み:機能、構造、産業用途を徹底解説
  2. 旋盤の15の主要コンポーネントとその機能を徹底解説
  3. C#構造体(struct)完全ガイド:定義、活用、クラスとの違い
  4. C++フレンド関数とフレンドクラス:アクセス制御のマスター
  5. C言語 構造体 完全マスター: 定義・変数・アクセス・高度な例
  6. C言語 構造体とポインタ: 実践ガイド
  7. Cプログラム構造の理解:初心者向けガイド
  8. C言語のデータ型完全ガイド:整数、浮動小数点、void型
  9. C言語の定数とリテラル:型、使い方、ベストプラクティス
  10. C言語の関数マスター:構造、宣言、ベストプラクティス
  11. C++オーバーロード完全マスター:関数と演算子のオーバーロード