[過去ログ] スレ立てるまでもない質問はここで 158匹目 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
563(1): デフォルトの名無しさん [] 2022/01/09(日) 12:18:19.70 ID:bCtuiO5D(1/3) AAS
プログラミングで言う初期化というのは変数などを宣言したときに変数の中身が決まっておらず何が入っているかわからない状態だから何かしらの値で確定させることであり、いちばん最初に確定させることが初期化、それ以降が代入ということで間違いないでしょうか?
569: デフォルトの名無しさん [] 2022/01/09(日) 15:27:44.88 ID:bCtuiO5D(2/3) AAS
>>564564(1): デフォルトの名無しさん [sage] 2022/01/09(日) 14:01:25.56 ID:djfYsB0G(1) AAS
>>563
レイヤが違うというか、文脈次第というか…
「プログラミングで言う」程度の緩い文脈なら
初期化は「初期値にすること」だし、代入は「値をセットすること」だよ
両者は排他ではない、初期化を代入でやるしかない言語もあるだろう
例えば「Cの文法上」という文脈なら
初期化は「宣言時に値を指定すること」、代入は「代入演算子の動作」で
両者は排他だけど、それは「Cの文法上の用語では」であって
Cのプログラムでも代入で初期値にすることもある
ありがとうございます。
C++やっててちょっとよくわからなくなってしまったのです。
struct addrinfo hints;
の後に
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;
なのですが、
hintsの中身って決まってないよな・・・なんでZeroMemoryするんだろうと思ったのがきっかけです。
C言語では初期化と代入はどのように違うものなのでしょうか?
573: デフォルトの名無しさん [] 2022/01/09(日) 19:41:42.25 ID:bCtuiO5D(3/3) AAS
>>571571(1): デフォルトの名無しさん [sage] 2022/01/09(日) 15:45:52.69 ID:3xk8lzI3(2/2) AAS
代入も初期化も同じだからな
ZeroMemoryはhintsを全部zeroで埋めてる。で、その後にhints.ai_familyなどを代入してる
後からメンバ変数全部に値を代入するならゼロで埋める意味ないじゃん
ってことならその通り。初期化なんてしなくてもいいし意味ない
ただstruct addrinfoにはその他のメンバもある。例えば*ai_addrやai_addrlenなど
ai_addrlenがゼロじゃないと*ai_addrに何か入ってるって意味になっておかしいことになる
つまりメンバ変数全部には代入してないから意味が出てくる
zeromemoryしとくとそこらへんの省いたのにもゼロが代入されるし、パディング領域があるならそこにもゼロが代入される
めちゃめちゃわかりやすかったです。
ありがとうございます。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.038s