C 関数の「sizeof()」が配列パラメータに対して予期しない結果を返すのはなぜですか?

Susan Sarandon
リリース: 2024-11-11 07:31:02
オリジナル
321 人が閲覧しました

Why Does `sizeof()` Return Unexpected Results for Array Parameters in C   Functions?

C 関数の配列パラメーターに対して sizeof() が同じように機能しない理由

C では、配列は に渡されるとポインターに分解されます。関数を使用すると、配列サイズを決定する際の sizeof() の使用の信頼性が低くなります。これを理解するために、次の関数を分析してみましょう。

int length_of_array(int some_list[])
{
    return sizeof(some_list) / sizeof(*some_list);
}
ログイン後にコピー

配列パラメータの問題

パラメータ some_list は配列として宣言されていますが、関数のシグネチャは事実上、 int length_of_array(int* some_list) と同等です。これは、配列が関数パラメータ内のポインタに分解されるためです。

sizeof() への影響

このコンテキストで sizeof(some_list) を使用すると、ポインタのサイズが計算され、結果は次のようになります。値は 1。sizeof(*some_list) (整数のサイズ) で割ると、次のようになります。 1.

指定された例では、出力に見られるように、配列 num_list に 15 個の要素が含まれているにもかかわらず、関数 length_of_array() は一貫して 1 を返します。 🎜>

This is the output from direct coding in the
int main function:
15
This is the length of the array determined
by the length_of_array function:
1
ログイン後にコピー

テンプレートを使用した解決策関数

関数で配列のサイズを決定するには、テンプレート関数を使用し、配列を参照で渡すことができます。

template<size_t N>
int length_of_array(int (&amp;arr)[N])
{
    return N;
}
ログイン後にコピー
この場合、テンプレート パラメーター N は既知のサイズを取得します。配列の値を変更し、sizeof() が正しい値を返すようにします。

以上がC 関数の「sizeof()」が配列パラメータに対して予期しない結果を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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