在struct值中键入不匹配

时间:2014-04-02 18:45:07

标签: c

#include <stdio.h>

int main(void) {
    struct book
    {
        char name[20];
        float price;
    };
    struct book b={5};
    printf("%f\n",b.price);
    return 0;
}

那么正在传递的5正在发生什么?它存放在哪里?或者根本没有存储?

即使我打印b.name,也没有打印任何内容。

2 个答案:

答案 0 :(得分:5)

5被用作结构的第一个元素的初始化器。这恰好是一个数组,因此5初始化该数组的第一个元素。

在C中,如果使用括号括起初始化程序,则所有元素都会被初始化;并且你没有指定得到0.所以它与:

相同
struct book b = { 
    {5, 0, 0, 0, /* ... */ },
    0
};

浮动内的printf将打印0。如果您尝试将b.name打印为字符串,则将打印包含一个值为5的字符的字符串。在大多数系统中,这将是一个不可打印的字符,因此您可能没有可见的输出。

要获得5,您可以执行:printf("%d\n", b.name[0]);

答案 1 :(得分:0)

初始化在结构中按照在声明它之后创建类型struct的变量时传递的值的顺序发生。所以5自然地流向字符数组的第一个元素。所以5被存储为字符数组的第一个元素。初始化struct类型变量时,你不能跳过变量进行初始化,你必须遵循structure中变量声明的顺序。初步化.Matt McNabb回答说