スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

C言語 sizeofの罠。

C言語のお話。
1時間ほどはまった。

どうやら


引数で渡した配列に対してsizeofをしてもポインタのサイズしか返らない


ということが頭に入ってなかったようだ。
そもそもsizeofは演算子?らしいし、他のやつらと雰囲気は違うし最初から警戒していたのだ。
やはり心を許してはいけなかった。不覚。

調べたい配列が同じ関数内で宣言してあるかどうか確認して使えばきちんと配列の大きさを得られるようだ。
とりあえず安心といったところ。
配列の大きさを渡すために別に引数を用意してやることで今回は見逃してやることにした。

いつかこいつも使いこなしてやるぜ。という闘志をみなぎらせ、今日も寝ることにしよう。(すぐ勉強しろ)

ねよっと。


この記事には後日書いた続きがあります。ここ

コメントの投稿

非公開コメント

Re: C言語 sizeofの罠。

こんにちは。

>引数で渡した配列に対してsizeofをしてもポインタのサイズしか返らない
これは誤りです。前半に勘違いがあると思います。

>引数で渡した配列
配列を実引数として関数に渡すことはできません。
配列が(暗黙に)型変換され,配列の先頭要素へのポインタが渡されます。

ですから,
>に対してsizeofをしてもポインタのサイズしか返らない
これは,ポインタに対する sizeof ということになります。
ですから,ポインタのサイズが返るのは自然です。

勘違いしやすいのは
void f(int a[])
という宣言の形をしているので,まるで配列自体を渡しているかのように見えるからだと思います。

これは
void f(int *a)
と全く同じであり,いずれの a も配列ではなく,ポインタです。

Re: Re: C言語 sizeofの罠。

ご指摘ありがとうございます!
返信が文字数制限でかけないようなので記事にして返信させていただきます。
プロフィール

あしゅ

Author:あしゅ
ぷぃぷぃ日常。
いつのまにか雑記ブログに。

カテゴリ
最新記事
検索フォーム
最新コメント
リンク
このブログをリンクに追加する
ブロとも申請フォーム

この人とブロともになる

カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。