C ++数组大小

时间:2012-03-01 02:35:57

标签: c++ arrays sizeof

  

可能重复:
  Sizeof array passed as parameter

我在c ++中使用这个sizeof运算符很愚蠢,你知道为什么它是4和12吗?

 void function (int arg[]) {
        cout<<sizeof(arg)<<endl; // 4
    }

    int main ()
    {
        int array[] = {1, 2, 3};
        cout<<sizeof array<<endl; // 12
        function (array);
       return 0;
    }

4 个答案:

答案 0 :(得分:23)

main中,名称array是一个数组,因此您可以使用sizeof获取数组的字节大小。但是,数组在传递给函数时会衰减到指针,因此在函数内部会得到sizeof(int*)

请注意,采用T arg[]形式的参数正好与将参数作为T* arg相同。所以你的功能完全等同于

void function(int* arg) {
    cout << sizeof(arg) << endl;
}

答案 1 :(得分:4)

 void function (int arg[]) // or void function (int arg[N])

相当于

 void function (int *arg)

因此,

sizeof(arg) == sizeof(int*)

如果您打算传递数组本身,那么C ++会让您通过引用传递它:

void function (int (&arg)[3])
              //   ^^^ pass by reference

现在,

sizeof(arg) == sizeof(int[3])

答案 2 :(得分:0)

下面的程序与下一个程序类似。

void function (int arg[]) {
    cout<<sizeof(arg)<<endl; // 4
}

下面的程序打印指针的大小。

void function (int *arg) {
    cout<<sizeof(arg)<<endl; // 4
}

答案 3 :(得分:-1)

数组只是指向任意数量内存的指针。如果你执行sizeof(数组),它将返回一个指针的大小 - 在32位系统上为4个字节,在64位系统上为8个字节(如果程序编译为64位)。

这与你必须在c / c ++中空终止字符串的原因相同 - 表示数组的结尾。

简而言之,您可以自己跟踪阵列的大小。如果分配一个40字节的数组,则必须确保永远不要访问第40个索引之上的数组(即数组[39])。

希望这有帮助。