刘斩仙 发表于 2023-6-10 17:27:49

为什么sizeof(long double) 可以全部写进sizeof(),而其他不用,这里面有什么硬性吗

#include <stdio.h>

int main()

{
        printf("int = %d\n",sizeof(int));
        printf("short int = %d\n",sizeof(short));
        printf("long int =%d\n",sizeof(long));
        printf("long long int = %d\n",sizeof(long long));
        printf("char = %d\n",sizeof(char));
        printf("_Bool = %d\n",sizeof(_Bool));
        printf("float = %d\n",sizeof(float));
        printf("double = %d\n",sizeof(double));
        printf("long double = %d\n",sizeof(long double));
       
        return 0;
}

Ewan-Ahiouy 发表于 2023-6-10 17:29:26

你这是什么意思?

sfqxx 发表于 2023-6-10 17:38:03

在C语言中,`sizeof()`是一个运算符,用于求取给定数据类型、变量或表达式的字节数。因此,在使用`sizeof()`时,需要将要计算大小的数据类型、变量或表达式放在括号内。

对于所有的数据类型,都可以将其尺寸作为参数传递给`sizeof()`。例如,`sizeof(int)`和`sizeof(double)`都是合法的。但对于具有复杂类型规范的数据类型(如数组、指针和结构体)而言,传递整个类型规范可能会更方便。例如,`sizeof(array)`比`sizeof(int) * length`更清晰明了。

对于提到的这段代码,它中的所有`printf()`调用都使用了`sizeof()`运算符,并放置了不同的数据类型参数。在这里,可以看出每个数据类型所占据的字节数。对于大多数数据类型,由于它们都是基本数据类型,因此只需将名称作为参数传递给`sizeof()`就好了。

然而,当涉及到`long double`时,因为它的字节数相对较大,所以一些编译器可能无法正确解析带有空格的参数。而为了确保`sizeof(long double)`可正常运行,可以将整个数据类型放在圆括号中,从而确保它作为单个参数,如`sizeof(long double)`。

刘斩仙 发表于 2023-6-10 17:40:32

不明白

刘斩仙 发表于 2023-6-10 17:44:25

所以说其他sizeof()例如sizeof(short)可不可以写成sizeof(short int),sizeof(long long)写成sizeof(long long int)

sfqxx 发表于 2023-6-10 18:02:12

刘斩仙 发表于 2023-6-10 17:44
所以说其他sizeof()例如sizeof(short)可不可以写成sizeof(short int),sizeof(long long)写成sizeof(long...

是的,其他的`sizeof()`也可以写成它们本身的完整类型名,例如`sizeof(short)`可以写成`sizeof(short int)`。同样地,`sizeof(long long)`可以写成`sizeof(long long int)`。这是因为在 C 语言中,短整型(`short`)、长整型(`long`)和长长整型(`long long`)都有一个完整的形式(`short int`、`long int` 和 `long long int`),这些形式在语法上与短/长/长长整型等价,而且具有相同的大小和行为。

给个最佳答案
页: [1]
查看完整版本: 为什么sizeof(long double) 可以全部写进sizeof(),而其他不用,这里面有什么硬性吗