gpt4 book ai didi

c - 结构数组 : Structure members are Enum Variables

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:51 26 4
gpt4 key购买 nike

我正在尝试理解作为可重用固件开发指南一部分的代码。这本书对我来说太难了,但我仍然在努力理解代码。

在本书附带的示例代码中,有类似下面的语法

typedef enum 
{

DIO_MAX_MODE
}DioMode_t;


typedef enum
{
DIO_PULLUP_DISABLED, /*< Used to disable the internal pull-ups */
DIO_PULLUP_ENABLED, /*< Used to enable the internal pull-ups */
DIO_MAX_RESISTOR /*< Resistor states should be below this value */
}DioResistor_t;

typedef enum
{
DIO_OUTPUT,
DIO_INPUT
}DioDirection_t;



typedef struct
{
DioResistor_t Resistor; /**< Pullup/Pulldown Resistor - ENABLED or DISABLED */
DioDirection_t Direction; /**< Data Direction - OUTPUT or INPUT */
DioMode_t Function; /**< Mux Function - Dio_Peri_Select */
}DioConfig_t;

如果我没理解错的话,结构体的成员是枚举变量。

在代码的一部分中,开发人员通过以下方式为其分配了一个值(不准确,我试图通过对其进行类似的语法来理解整个事情的工作原理)

 DioConfig_t config[] = {    {1, 2, 3}, 
{4, 5, 6}
};

这里发生了什么?这可能吗??

如上初始化时,它是否影响枚举的值,哪些值正在变化以及如何访问它们?

编辑:

如果我创建这样的结构

#include <stdio.h>

struct test {
int a;
int b;
};

int main()
{
struct test var[] = { {1, 2}, {3, 4} };

/*
struct test var[0] = {1, 2}
struct test var[1] = {3, 4}
*/

printf("%d %d\n", var[0].a, var[1].a);

return 0;

我知道分配给 ab 的值是基于我用来调用它们的结构变量例如:var[0].a = 1 和 var 1 .a = 3

但是我首先展示的代码将 enum 变量作为结构成员所以分配给结构成员的值是

config[0].Resistor = 1
config[0].Direction = 2
config[0].Function = 3

因为这些是 enum 变量,它会改变 enum 值吗???

PS:我开始学C才几个月,我用它来开发小型嵌入式项目,我看了几个在线教程和视频,学习了struct和指针,但是当我打开这个
code ,这对我来说没有多大意义。这正常吗??

最佳答案

What's happening here? Is this possible??

内括号({1, 2, 3}{4, 5, 6})分别初始化一个DioConfig_t。外括号使用内括号定义的两个 DioConfig_t 初始化数组 config[]。它等同于:

DioConfig_t a = {1, 2, 3};
DioConfig_t b = {4, 5, 6};
DioConfig_t config[] = {a, b};

令人困惑的是大括号在这里做了两件不同的事情。一个是初始化一个结构体,另一个是初始化一个数组。

注意:我不确定我的术语是否 100% 正确,当我说“它们是等价的”时,我并没有考虑性能可能因编译器优化级别而异。

It didn't make much sense to me. Is that normal?

你问的是被一些C代码搞糊涂是否正常?绝对地。这门语言中有很多技巧、陷阱和晦涩难懂的东西,即使是使用它多年的人也会学到一些新东西,然后不时被一些棘手的 C 代码弄糊涂。不要让这让你气馁。

关于c - 结构数组 : Structure members are Enum Variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52515185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com