在C和C++中,sizeof运算符的工作方式是否不同?

13 浏览
0 Comments

在C和C++中,sizeof运算符的工作方式是否不同?

我写了一个小的printf语句,在C和C++中的运行结果不同:

    int i;
    printf ("%d %d %d %d %d \n", sizeof(i), sizeof('A'), sizeof(sizeof('A')),    sizeof(float), sizeof(3.14));

在使用gcc编译器的C语言中,上述程序的输出结果是4 4 8 4 8

在使用g++编译器的C++语言中,上述程序的输出结果是4 1 8 4 8

我预期在C语言中的结果是4 1 4 4 8,但实际结果并非如此。

printf语句中第三个参数sizeof(sizeof('A'))返回的是8

有人能够给我一个解释吗?

0
0 Comments

C 和 C++ 中 sizeof 操作符的工作方式不同。在 C 中,char 类型占用一个字节,但 'a' 是一个 int 常量,因此它(根据所编译的架构)占用四个字节宽度。而在 C++ 中,char 和 'a' 都是占用一个字节的 char 类型。

最重要的信息是,C++ 不是 C 的超集。它有许多类似这样的小型破坏性变化。

int 的大小不一定是四个字节。

感谢你引用的最后一句话,我是基于这句引述提出这个问题的。C++ 当然不是严格的超集。

为什么 sizeof(3.14) 占用 8 个字节。3.14 是浮点数对吧?

在 Java、C 和 C++ 中,3.14 和 3d 都是 double 字面量,而 3.14f 是 float 字面量。

C 和 C++ 中的 sizeof 操作符的工作方式不同。在 C 中,char 类型占用一个字节,但 'a' 是一个 int 常量,因此它(根据所编译的架构)占用四个字节宽度。而在 C++ 中,char 和 'a' 都是占用一个字节的 char 类型。C++ 不是 C 的超集,它有许多类似这样的小型破坏性变化。int 的大小不一定是四个字节。在 Java、C 和 C++ 中,3.14 和 3d 都是 double 字面量,而 3.14f 是 float 字面量。

0
0 Comments

C和C++中的sizeof运算符的工作方式不同的原因是,C中的字符字面量的大小与C++中的字符字面量的大小不同。在C中,字符字面量的类型是int,而在C++中,它们的类型是char

这个问题的解决方法是,如果需要获取字符字面量的大小,可以使用不同的方法。在C中,可以将字符字面量强制转换为char类型,然后使用sizeof运算符来计算它的大小。在C++中,直接使用sizeof运算符来计算字符字面量的大小即可。

对于第二个问题,sizeof(3.14)返回的结果是8个字节,因为3.14是一个双精度浮点数(double)。要获取一个浮点数的字节大小,可以使用sizeof运算符。如果需要获取一个单精度浮点数(float)的字节大小,可以使用sizeof运算符和后缀f来声明一个浮点数,例如sizeof(3.14f)

这个问题的根源是C和C++中的数据类型的差异,以及sizeof运算符的工作方式。理解这些差异和运算符的工作方式,可以帮助程序员正确地处理数据类型和字节大小的问题。

0
0 Comments

在C和C++中,sizeof运算符的工作方式是不同的。具体来说,sizeof返回一个无符号整数size_t,其大小取决于计算机的架构(32位还是64位)以及具体的实现。这导致了在使用sizeof运算符时可能会出现问题。

问题的出现原因是,sizeof运算符返回的大小是由编译器和计算机架构决定的。这意味着在不同的编译器和不同的机器上,sizeof运算符可能会返回不同的结果。这可能会导致代码在不同的环境中表现不一致,甚至出现错误。

为了解决这个问题,可以采取以下几种方法:

1. 避免依赖sizeof返回的确切大小:在编写代码时,应该避免依赖sizeof运算符返回的确切大小。相反,应该根据需要使用sizeof来计算数据类型的大小,并使用该大小来进行相关的操作。

2. 使用固定大小的数据类型:如果确实需要使用特定大小的数据类型,可以使用具有固定大小的数据类型,例如uint32_t和uint64_t。这些数据类型保证在不同的编译器和机器上具有相同的大小。

3. 使用条件编译:在某些情况下,可能需要根据不同的编译器和机器使用不同的代码。这可以通过使用条件编译来实现。通过在代码中使用条件编译指令,可以根据不同的条件选择不同的代码路径。

总之,sizeof运算符的工作方式在C和C++中是不同的,这可能会导致在不同的环境中出现问题。为了解决这个问题,可以避免依赖sizeof返回的确切大小,使用固定大小的数据类型或使用条件编译来处理不同的情况。

0