的大小输出
#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 ?
答案 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
返回整个数组的大小。