为什么常量和变量的位数不同?

Why there is a difference between the number of bits given for a constant and a variable?

常量浮点数的大小为 8 个字节,而变量浮点数仅为 4 个字节。

#include <stdio.h>
#define x 3.0
int main(){
    printf("%d", sizeof(x));
    return 0;
}

这也适用于常量 char(给出 4 个字节) 而 char 变量只给出 1 个字节。

我认为这个问题已经在之前的几篇文章中得到了解答。基本思路是:

A) 在 C:

中考虑这个程序
#include <stdio.h>
#define x 3.0      /* without suffix, it'll treat it as a double */
#define y 3.0f     /* suffix 'f' tells compiler we want it as a float */

int main() {
    printf("%ld\n", sizeof(x)); /* outputs 8 */
    printf("%ld", sizeof(y)); /* outputs 4 */
    return 0;
}

基本上,double 比 float 具有更高的精度,因此在出现歧义的情况下更可取。因此,如果您声明的常量没有后缀 'f',它会将其视为双精度值。

B) 现在看看这个:

#include <stdio.h>
#define x 'a'

int main() {
    char ch = 'b';
    printf("%ld\n", sizeof(x)); /* outputs 4 */
    printf("%ld", sizeof(ch)); /* outputs 1 since compiler knows what it's 
                                  exactly after we declared & initialized var 
                                  ch */
    return 0;
}

该常量值 ('a') 被转换为其 ASCII 值 (097),这是一个数字文字。因此,它将被视为整数。 请参阅此 link 了解更多详情: .