2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C言語構造体の理解のための自分への備忘録

Last updated at Posted at 2024-03-24
  • 構造体

    いろいろな変数をまとめた型を構造型(レコード型)といい、フィールド(データ項目)を集めたもので各メンバ(データ型)が異なっていてもよい。一般的には構造体と呼ばれることが多い。

    例として、通常の方法で異なるデータ型を宣言

    #include<stdio.h>
    int main(void){
    
    	int year;       /* 学年 */
    	int clas;       /* クラス */
    	int number;     /* 出席番号 */
    	char name[64];  /* 名前 */
    	double stature; /* 身長 */
    	double weight;  /* 体重 */
    
    }
    

    次に複数のデータ型をまとめた構造体の場合

    #include<stdio.h>
    struct student
    {
        int year;       /* 学年 */
        int clas;       /* クラス */
        int number;     /* 出席番号 */
        char name[64];  /* 名前 */
        double stature; /* 身長 */
        double weight;  /* 体重 */
    };
    
    int main(void){
    	struct student data;
      return 0;
    }
    

    構造体の型を宣言する時にはstruct(ストラクト)とつける。

    その次にデータ型となる構造体の型名をつける上記の例だとstudentが構造型のデータ名となる。この型名を一般的に構造体タグ名と呼ばれる。

    {}の中にまとめたい変数の型と名前を宣言している。

    実際に使うためには、構造体の型の変数を宣言する必要がある為、構造体の型の変数を宣言するには、次のようにしています。

    struct student data;

    始めにstructをつけ、次に構造体の型名のstudent、変数名としてdataを宣言しています。

    今後は構造体の型名はstructがないと型として定義できない為、構造体タグ、構造体タグとして宣言された変数を構造体変数と呼びます。

    ※関数では、グルーバル領域で、プロトタイプ宣言を行うことで、メイン関数の下に関数を作成しても動作できましたが、構造体タグ自体を、関数よりも上に宣言することが一般的らしいです。

    そうすることで他の関数が後にきても一番上に構造体タグがある為、どの関数でも利用できるという点があります。

    構造体の使い方

    構造体変数は、構造体タグで宣言されたすべての型をもっています。

    配列の時には、同じ型の変数を番号によって区別していましたが、

    要素名(変数名):32,45,63のそれぞれを0から始まる要素番号で区別
    int [3] = {32, 45, 63};

    構造体変数では、型に関係なく、すべての要素を名前によって区別します。

    構造体変数名.要素名

    ※ここで、. は小数点記号を使用します。カンマではありません。

     小数点記号を流用しているだけであって、少数そのものとはまったく関係ありません。

構造体タグは配列にアクセスすることも可能です。
以下はその一例です。

#include <stdio.h>

struct student
{
    int year;     
    int suuti[3];
};

int main(void)
{
    struct student data;
    data.year = 10; /* year要素にアクセス */
    //suuti表示
    for(int i = 3; i >= 0; i--){
        scanf("%d", &data.suuti[i]); /* 入力部分 */
    }
    for(int i = 0; i <= 3; i++){
        printf("Hyouzi:%d\n", data.suuti[i]);
    }
    
    //year表示
    printf("%d\n", data.year);

    return 0;
}

また初期化する方法としては、上記の例だと、scanf関数で一つずつ要素を追加していきましたが、以下のように構造体の型として初期化する方法もあります。

#include <stdio.h>

struct example {
    int array[3];
    int value;
};

int main() {
    // 構造体配列の宣言と初期化
    struct example ex = {{1, 2, 3}, 0};

    // 初期化された構造体の値を表示
    printf("Array elements: %d, %d, %d\n", ex.array[0], ex.array[1], ex.array[2]);
    printf("Value: %d\n", ex.value);

    return 0;
}

基本情報でも、構造型(struct) 構造体タグ名(名前なんでも良い) 変数名で出題される可能性がある為、回は構造体の配列のアクセス方法や、構造体の意味や日本語できた場合の対処もかねて、書いてみました。
また、アウトプットをかねてこれから少しずつ寄稿していこうと思います。

参考文献: 苦しんで覚えるC言語

2
0
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?