LoginSignup
0
0

More than 1 year has passed since last update.

【C】初めてのC言語(4. 構造体)

Last updated at Posted at 2022-05-08

はじめに

学習環境

  • 今回はpaiza.ioのC言語のエディタを使いました。

構造体とは

  • データ型の一つで、1つもしくは複数の値をまとめて格納できる型のこと。(Wikipediaより
    • JavaやC#のクラスは「データとデータに紐づく処理をまとめたもの」なので、構造体は似て非なるものだと思います。
    • VBAのユーザー定義型は構造体と同義だと思います。

サンプルコード

構造体を使った例

  • 普通に構造体を使うと、以下のようになります。
    • 構造体employee型の変数を宣言する際に、常にstructというキーワードが必要になるのが注意点です。
  • _employeeのように下線(アンダースコア)で始まる名前は予約されているので、このような名前をユーザーが使うのは好ましくありません。(※参考URL
    • @SaitoAtsushi さん、ご指摘ありがとうございました。
Main.c
#include <stdio.h>
struct employee {   /* タグ名:社員型 */
    int id;         /* 整数型のメンバ変数:社員番号 */
    char* name;     /* 文字列型(char型のポインタ)のメンバ変数:社員名 */
};

int main(void){
    struct employee emp;
    emp.id = 1;
    emp.name = "Sato";
    
    printf("社員番号%dの社員名は%sです。", emp.id, emp.name);
}
出力結果
社員番号1の社員名はSatoです。

typedefとは

  • typedef 定義されている型 定義する新しい型名;という構文で、既に定義されている型に対して、別の新しい名前をつけて定義することができます。
Main.c
typedef int nk_int;  /* int型をnk_int型という名前で再定義する */

typedefを使った例

  • 構造体を宣言する箇所がtypedef struct 型名 {...} 新たな型名という構文になっています。
  • typedefを使う事により、structキーワード無しで構造体Employee型の変数を宣言できます。
    • typedefを使った方が、main関数内がスッキリした感じがします。
  • なお @SaitoAtsushi さんからのコメントによると、「構造体タグ名は省略してもかまわない」とのことですが、一方で「構造体タグが必要な場合は、型名と一致させるのがおそらく現代の主流だと思われる」とのことでした。
    • @SaitoAtsushi さん、ご指摘ありがとうございました。
    • 今回のコードでは、構造体タグ名と型名を一致させる形で書いています。
Main.c
#include <stdio.h>
typedef struct Employee {   /* employee(社員)はタグ名 */
    int id;                 /* 整数型のメンバ変数(社員番号) */
    char* name;             /* 文字列型のメンバ変数(社員名) */
} Employee;                 /* employee型をEmployee型として再定義する */

int main(void){
    Employee emp;
    emp.id = 1;
    emp.name = "Sato";
    
    printf("社員番号%dの社員名は%sです。", emp.id, emp.name);
}

参考URL

0
0
4

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
0
0