0

重複の可能性:
Cプログラミング言語の配列のサイズ?

    #include "stdafx.h"
    #include <string>
    #include <iostream>

    using namespace std;

    string a[] = {"some", "text"};

    void test(string a[])
    {
        int size_of_a = sizeof(a) /sizeof(a[0]);
        cout << size_of_a; 
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
        test(a); //gives 0
        int size_of_a = sizeof(a) /sizeof(a[0]);
        cout << size_of_a; //gives 2
        return 0;
    }

uがコメントで見ることができるように、test(a)は私が期待するように2ではなく0を与えます。誰かが理由と方法を説明できますか?ありがとう

4

2 に答える 2

1

配列を関数に渡すと、配列の最初の要素へのポインターに減衰するため、test(string a[])関数内で

sizeof(a);

実際には、配列のサイズではなく、ポインターのサイズを返します。

于 2012-09-21T17:04:41.097 に答える
0

配列がポインタにデケイするのを防ぐために、配列への参照を関数に渡すことができます。ただし、関数の仮引数の配列のタイプが発生し、実際の引数は一致する必要があります(サイズを含む)。templateしたがって、関数を任意のサイズの配列で機能させるために使用する必要があります。

template <int N>
void foo(const string (&a)[N])
{
    int size_of_a = sizeof(a) /sizeof(a[0]);
    cout << size_of_a; 
}
于 2012-09-21T17:12:03.073 に答える