【第二十六回】ゆっくりと学ぶC言語講座【構造体1】

แชร์
ฝัง
  • เผยแพร่เมื่อ 21 ต.ค. 2024

ความคิดเห็น • 8

  • @ganngimari325
    @ganngimari325 ปีที่แล้ว

    分かりやすかったです。ありがとうございました

  • @toshi5613
    @toshi5613 2 ปีที่แล้ว +1

    とても分かりやすい解説です。ありがとうございます!!

  • @柊弥生-c6j
    @柊弥生-c6j 2 ปีที่แล้ว +1

    テスト前に助かりました!!!

  • @naohiro19TV
    @naohiro19TV 7 หลายเดือนก่อน

    struct data {
    char *name;
    int age;
    double height;
    };
    struct data d = { .name = "hoge太郎", .age = 24, .height = 168.5};
    C言語のC99やC++20において、上記のように構造体のメンバーに代入するものを「指示付き初期化」といいます。
    このような書き方が許されるようになっています。

  • @szk_12358
    @szk_12358 2 ปีที่แล้ว

    学校の授業で休んだところでした助かりました

  • @renishikawa1003
    @renishikawa1003 2 ปีที่แล้ว

    いいですね!

  • @YukihiroMatsushita-o1h
    @YukihiroMatsushita-o1h ปีที่แล้ว

    なぜnameにポインタがついてるのですか?

    • @for8765
      @for8765  ปีที่แล้ว +1

      まずは、ご視聴ありがとうございます!
      「name」は「文字配列(※文字列ではないことが重要)」になっているため先頭アドレスを構造体に渡しメモリを確保する必要があります。
      これは、第25回のC言語講座の配列の先頭アドレスを関数に渡して表示させるのと同じ仕組みになっています。第25回のC言語講座の場合は関数に配列の大きさを渡す必要がありますが「文字配列」の場合は「\0(ヌル文字)」で文字の終わりがわかるため自動で判断されます。
      また「name[100]」という書き方もできますがこの場合、英数字100文字分の領域しか確保できないためコンパイルエラーになります。
      「*name」の場合は動的に確保されるためメモリのムダもないためこの書き方になりました。
      ただし、この書き方も注意が必要で適切なタイミングでメモリを開放しないとメモリが確保されたままになるのでどこかで開放してあげる必要があります。
      以上が説明になります。