当前位置:  开发笔记 > 编程语言 > 正文

为什么int指针的大小与int数组的大小不同?

如何解决《为什么int指针的大小与int数组的大小不同?》经验,为你挑选了2个好方法。

让我们以下代码:

int x;
int *p = &x;
int t[3];

然后sizeof返回:

sizeof(x) -> 4
sizeof(p) -> 8
sizeof(t) -> 12

我想这sizeof(t)是结果3 * sizeof(int).但是作为t指向他的第一个元素的指针,它的大小应该是sizeof(p).

为什么sizeof(t)返回代表数组的内存块的大小?

谢谢.



1> Bathsheba..:

t是一种int[3]类型,而不是指针类型.

所以它的大小是3 * sizeof(int).

在某些情况下,t 衰减到指针,但这不是那些实例之一.



2> Vlad from Mo..:

由于变量t被声明为具有数组类型

int t[3];

然后sizeof( t )产生一个等于的值3 * sizeof( int )

C标准(6.5.3.4 sizeof和alignof运算符)

2 sizeof运算符产生其操作数的大小(以字节为单位),

实际上,具有三个类型元素的数组int占用内存等于字节数3 * sizeof( int ).

在少数例外的表达式中,在sizeof运算符数组中使用指定符将转换为指向其第一个元素的指针.

因此,如果您将使用例如以下表达式

sizeof( t + 0 )

然后t在表达式t + 0中将转换为指针,你将得到它sizeof( t + 0 )等于int你的平台上指针的大小,这是8.

来自C标准(6.3.2.1 Lvalues,数组和函数指示符)

3 除非它是sizeof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则将类型为''array of type''的表达式转换为类型为''指针的表达式键入''指向数组对象的初始元素,而不是左值.如果数组对象具有寄存器存储类,则行为未定义.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有