ホームページ > バックエンド開発 > C++ > `sizeof()` が関数内と関数外の C 配列に対して異なる値を返すのはなぜですか?

`sizeof()` が関数内と関数外の C 配列に対して異なる値を返すのはなぜですか?

Barbara Streisand
リリース: 2024-12-21 16:47:09
オリジナル
871 人が閲覧しました

Why Does `sizeof()` Return a Different Value for C Arrays Inside and Outside Functions?

関数内の C 配列の誤解を招く Sizeof()

C 配列を扱う場合、関数に渡されたときの動作を理解することが重要です。この質問は、関数内と関数外の配列の sizeof() 値の驚くべき違いを明らかにします。

問題:

指定された C プログラムでは、サイズ 3 が宣言されており、そのサイズは sizeof(point)/sizeof(point[0]) を使用して正しく取得されます。ただし、同じ配列が test() 関数に渡されると、sizeof(arr) は誤った値 2 を返します。

理由:

配列がC の関数に渡されると、その最初の要素へのポインターに分解されます。したがって、関数パラメーターの sizeof() は、配列自体ではなくポインターのサイズを測定します。これにより、test() 関数で誤った結果が発生します。

解決策:

この問題に対処するには、配列のサイズを別のパラメータとして渡す必要があります。関数へ:

void test(int arr[], size_t elems) {}
ログイン後にコピー

main() 関数では、配列サイズを渡すことができます。使用方法:

test(point, sizeof(point) / sizeof(point[0]));
ログイン後にコピー

注:

sizeof(point)/sizeof(point[0]) の計算は動的に割り当てられたものには適用できないことに注意することが重要です。配列。スタックに割り当てられていません。

以上が`sizeof()` が関数内と関数外の C 配列に対して異なる値を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート