#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,也没有打印任何内容。
答案 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回答说