在这种情况下,sizeof wоrk是如何实现的呢?

问题描述 投票:4回答:2

请看下面的代码。

#include <stdio.h>

int main(void) 
{
    int i = 1;
    printf("%lu\n", sizeof(int[++i]));
    printf("%d", i);
}

我在测试 sizeof 运算符,因为可变长度的数组类型操作数是被评估的------。如果有人也能对此作出澄清,我会很高兴,但问题是不同的。.

6.5.3.42

sizeof运算符产生操作数的大小(以字节为单位),操作数可以是一个表达式或一个类型的括号名称。操作数的大小由操作数的类型决定。结果是一个整数。如果操作数的类型是一个可变长度的数组类型,操作数会被评估,否则,操作数不会被评估,结果是一个整数常数。.

以上代码在GCC上的输出如下。

8
2

谁能解释一下这个8是怎么来的?数组是否会衰减成指针呢?"变长数组 "部分也请给说明一下。

c arrays sizeof
2个回答
4
投票

当时 int[++i] 是评估。i 初始值为1。 所以 int[++i] 评价为 int[2]的数组,即一个 int 规模为2。

假设一个 int 在你的系统上是4个字节,这个数组的大小是8个字节。


4
投票

一个int是4个字节长。你将 sizeof operatore 传递给一个长度为 2 的 int 数组,为了存储一个 2 的 int 数组,你需要 2x4 = 8 字节。

++i

在使用i之前,将i的值从1递增到2,这就是为什么你的输出是8字节。这就是为什么你的输出是8和2。

© www.soinside.com 2019 - 2024. All rights reserved.