以下のコードを検討してください。これは、次の出力が生成されますC++スコープ?関数に配列を渡すときに問題が発生する
Length: 64 Testfn: 8 Length again: 64
私はトラブルtest
-functionでの出力が主な機能での出力に等しくない理由を理解を持っています。 test
-functionの出力が8に等しいことを考慮すると、sizeof(arg)
が配列自体ではなくポインタのサイズを取得するため、これが原因であると想定します。
これはすべて私には非常に論理的と思われるが、なぜsizeof
は、main関数内に同じ値を与えるものではありませんか?そして私はそれをどのように修正するのですか?逆参照でいくつかのことを試しましたが、これは何の違いもありません。
#include <iostream>
void test(int arg[]) {
std::cout << "Testfn: " << sizeof(arg) << std::endl;
}
int main() {
int int_arr[16];
std::cout << "Length: " << sizeof int_arr << std::endl;
test(int_arr);
std::cout << "Length again: " << sizeof int_arr << std::endl;
}
そして、あなたは 'のstd :: vector'を引数(C)として長さを渡すか、または使用する必要がある理由、これは正確に/ 'std :: array'(C++)です。 – crashmstr
はhttps://stackoverflow.com/questions/6567742/passing-an-array-as-an-argument-to-a-function-in-c、C++にも同様に適用されるを参照してください。 –
469あなたは研究をしていませんでしたか? :/たとえば、この[質問](https://stackoverflow.com/questions/1975128/why-isnt-the-size-of-an-array-parameter-the-same-as-within-main)を確認してください。間違いを作るためにそれらを恥 – gsamaras