ホームページ >バックエンド開発 >C++ >C 関数に渡される配列のサイズを確実に判断するにはどうすればよいですか?

C 関数に渡される配列のサイズを確実に判断するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-30 02:53:28802ブラウズ

How Can I Reliably Determine the Size of an Array Passed to a C   Function?

渡された関数の配列サイズの決定

問題は C で発生します。関数に渡された配列のサイズを決定すると、 sizeof が配列の長さを正確にキャプチャできないため、この問題が発生します。

1 つの一般的な解決策は、次のことを提案しています。配列要素 array[i] が NULL に達するとループを終了します。ただし、array[i] には配列の末尾近くにランダムなガベージ値が含まれる場合があるため、このアプローチではエラーが発生する可能性があります。

配列参照を使用したテンプレートベースのソリューション

C は、テンプレートと配列参照を通じて、より信頼性の高いソリューションを提供します。

template <typename T, int N>
void func(T (&a)[N]) {
    for (int i = 0; i < N; ++i) a[i] = T(); // reset all elements
}

このテンプレートベースの関数は、型の配列 a を受け取ります。 N の固定サイズを持つ T。参照演算子 & を使用すると、元の配列が a にバインドされ、サイズを明示的に渡さずに配列の要素にアクセスできるようになります。

この関数を使用するには、単に配列を取得して参照渡しします:

int x[10];
func(x);

この解決策は、ポインタではなく、配列にのみ適用されることに注意することが重要です。ポインターベースの配列の場合、サイズと要素へのアクセス機能を提供する標準テンプレート ライブラリ (STL) コンテナー std::vector を使用することをお勧めします。

以上がC 関数に渡される配列のサイズを確実に判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。