考虑按照指定的顺序满足这些要求。请注意,某些要求合并为一个。这通常是分配的情况;讲师并不总是完美的语言学家或逻辑学家,尤其是 IT 讲师。
1:创建一个结构,该结构将包含以下表示的位:
count:一个 4 位 BCD 数
红色 LED:1 位
绿色 LED:1 位
电机方向:2位
将结构命名为 motorStatus
首先响应这个,不要使用 typedef。位域使用int 类型。下一个要求:
使用 typedef 来命名这个新的数据类型:mtrStatus_t
您已经展示了编写基本类型定义的能力。 typedef unsigned char mtrStatus_t; 表示“我将 mtrStatus_t 定义为别名 unsigned char”。现在,编写一个像这样的基本 typedef,意思是“我将 mtrStatus_t 定义为别名 struct motorStatus”。将其放在struct motorStatus 定义之后,以便编译器可以看到它的别名。
2:创建结构的新实例并将其命名为motor1Status
为了澄清,您的讲师要求您声明一个名为 motor1Status 的变量,其类型为 mtrStatus_t 或 struct motorStatus。我认为您可以声明变量,但如果我错了,请纠正我。
3:编写语句来初始化新的结构成员,如下所示:
计数:9 BCD
红色 LED:1
绿色 LED:0
电机方向:10
计数:0x09;红灯:0x01;绿色LED:0x00电机方向:0x0A
您的讲师要求初始化,不是分配。在char str[] = "fubar"; 和char str[] = {'h','e','l','l','o','\0'}; 中,str 被声明并初始化为存储一个对应于“fubar”的字符串。在char str[6]; strcpy(str, "fubar"); 中,str 是在没有初始化的情况下声明的,并且“fubar”中的每个字节都被复制(分配)到 str 中的相应位置。你如何初始化一个结构?与第二次 str 初始化非常相似。
struct length_prefixed_string {
size_t length;
int zero;
char string[];
};
/* Initialisation here: */
struct length_prefixed_string hello = { .length = 5,
.string = "hello" };
这个例子使用了一个灵活的数组成员,它只能在结构体的末尾声明:char string[];。它传达了一个位于结构末尾的未知长度数组,不计入sizeof (struct length_prefix_string)。因此,该示例将 unknown length 存储在 length 参数中。这有点离题,但您可以在上面看到一个初始化(而不是赋值)。这个例子区分了初始化和赋值;您不能将此结构的.string 成员分配给hello.string = "hello";。
另一个区别是:初始化未提及的任何成员都将被分配一个零值(但仅在存在初始化时),因此@987654335的值上面示例中的@ 将为0。因此,您可以声明一个数组并用一条语句将其填零:int array[size] = { 0 };(赋值和初始化之间的另一个区别:int array[size]; array = { 0 }; 无效)。话虽如此,为了您的任务目的而忽略这一事实是个好主意,并明确初始化 greenLED 以便您的评分考官不会误解。
希望我能帮到你,在这里...