ขนาดวิดีโอ: 1280 X 720853 X 480640 X 360
แสดงแผงควบคุมโปรแกรมเล่น
เล่นอัตโนมัติ
เล่นใหม่
分かりやすかったです。ありがとうございました
とても分かりやすい解説です。ありがとうございます!!
テスト前に助かりました!!!
なぜnameにポインタがついてるのですか?
まずは、ご視聴ありがとうございます!「name」は「文字配列(※文字列ではないことが重要)」になっているため先頭アドレスを構造体に渡しメモリを確保する必要があります。これは、第25回のC言語講座の配列の先頭アドレスを関数に渡して表示させるのと同じ仕組みになっています。第25回のC言語講座の場合は関数に配列の大きさを渡す必要がありますが「文字配列」の場合は「\0(ヌル文字)」で文字の終わりがわかるため自動で判断されます。また「name[100]」という書き方もできますがこの場合、英数字100文字分の領域しか確保できないためコンパイルエラーになります。「*name」の場合は動的に確保されるためメモリのムダもないためこの書き方になりました。ただし、この書き方も注意が必要で適切なタイミングでメモリを開放しないとメモリが確保されたままになるのでどこかで開放してあげる必要があります。以上が説明になります。
struct data { char *name; int age; double height;};struct data d = { .name = "hoge太郎", .age = 24, .height = 168.5};C言語のC99やC++20において、上記のように構造体のメンバーに代入するものを「指示付き初期化」といいます。このような書き方が許されるようになっています。
学校の授業で休んだところでした助かりました
いいですね!
分かりやすかったです。ありがとうございました
とても分かりやすい解説です。ありがとうございます!!
テスト前に助かりました!!!
なぜnameにポインタがついてるのですか?
まずは、ご視聴ありがとうございます!
「name」は「文字配列(※文字列ではないことが重要)」になっているため先頭アドレスを構造体に渡しメモリを確保する必要があります。
これは、第25回のC言語講座の配列の先頭アドレスを関数に渡して表示させるのと同じ仕組みになっています。第25回のC言語講座の場合は関数に配列の大きさを渡す必要がありますが「文字配列」の場合は「\0(ヌル文字)」で文字の終わりがわかるため自動で判断されます。
また「name[100]」という書き方もできますがこの場合、英数字100文字分の領域しか確保できないためコンパイルエラーになります。
「*name」の場合は動的に確保されるためメモリのムダもないためこの書き方になりました。
ただし、この書き方も注意が必要で適切なタイミングでメモリを開放しないとメモリが確保されたままになるのでどこかで開放してあげる必要があります。
以上が説明になります。
struct data {
char *name;
int age;
double height;
};
struct data d = { .name = "hoge太郎", .age = 24, .height = 168.5};
C言語のC99やC++20において、上記のように構造体のメンバーに代入するものを「指示付き初期化」といいます。
このような書き方が許されるようになっています。
学校の授業で休んだところでした助かりました
いいですね!