【问题标题】:Based on sizeof operator [closed]基于 sizeof 运算符 [关闭]
【发布时间】:2013-10-19 11:46:34
【问题描述】:

为什么这段代码在 gcc 编译器中执行时输出为 8?

#include<stdio.h>
double i;
int main()
{
(int)(float)(char)i;
printf("%d",sizeof(i));
return 0;
}

【问题讨论】:

  • 因为你的程序调用了未定义的行为。
  • 你有没有想过尝试sizeof((int)(float)(char)i)?但这与sizeof((int)i) 相同。
  • 因为转换 i 不会改变 i 的类型。
  • 我试了一下 sizeof((int)(float)(char)i) 得到了 4

标签: c gcc casting type-conversion


【解决方案1】:

类型转换永远不会减少或增加变量的大小。

【讨论】:

    【解决方案2】:

    因为i的类型是double,而你平台上double的大小是8。

    奇怪的演员阵容无关紧要,它不会改变i的声明,也不会改变sizeof的调用。

    【讨论】:

    • 所以即使我用任何类型转换它也只会返回原始声明的类型大小......我说的对吗?
    • 但是当我尝试 'code' printf("%d",sizeof((int)(float)(char)i));我得到的值为 4。
    • 强制转换只是一个产生值的操作。它不会改变它的操作数。语句(int)i; 检索i 的值,将其转换为int,然后将结果扔掉。就像i+1; 甚至i; 一样,它是一个无效的声明(如果你问的话,你的编译器希望会警告你)。顺便说一句,您应该使用%zu 来打印sizeof 的结果,或者将其转换为int 以使其匹配%d
    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多