sizeof()的参数

时间:2014-07-05 11:50:04

标签: c++ arrays pointers sizeof

的大小输出
#include<iostream>
using namespace std;
struct node
{
    int k;
    struct node *next;
};
int main()
{
    int arr[3];
    cout<<sizeof(struct node)<<endl;
    cout<<sizeof(struct node *)<<endl;
    cout<<sizeof(arr)<<endl;
    cout<<sizeof(arr[0])<<endl;
    cout<sizeof(int *)<<endl;
    return 0;
}

8
4
12
4
4

我知道struct node *是一个指针,所以它的输出应该是4.所以类似arr也是一个指针,所以它的输出也应该是4,但为什么它显示arr数组的大小为12 ?

3 个答案:

答案 0 :(得分:4)

  

所以类似arr也是一个指针,所以它的输出也应该是4,但为什么它将arr数组的大小显示为12?

当数组名称是sizeof或一元&的操作数时,它不会转换为指向其第一个元素的指针。在这些情况下不适用转换规则 在

的情况下
cout<<sizeof(arr)<<endl; 

sizeof返回arr类型的大小,其类型为int[3] 3 int的数组)。

C11:6.5.3.4:

  

sizeof运算符产生其操作数的大小(以字节为单位),可以是   表达式或类型的括号名称。 大小取决于类型   操作数

答案 1 :(得分:4)

  

所以类似arr也是一个指针

不,arr不是指针,而是数组。虽然它可以自由转换为指针,但它是一种不同的对象。 sizeof的结果表示存储指定大小的数组所需的内存量,即int的三倍。

答案 2 :(得分:2)

这是因为arr的类型是int[3],而不是int*,正如您所假设的那样。所以sizeof返回整个数组的大小。