【发布时间】:2014-12-28 21:22:12
【问题描述】:
我是第一次开始使用 typedef,虽然我很了解结构,但我也没有使用过很多结构。
我创建了一个类型调用Max7219_t,如下所示:
typedef struct {
uint16_t digit1,
uint16_t digit2,
uint16_t digit3,
uint16_t digit4,
uint16_t digit5,
uint16_t digit6
uint16_t digit7,
uint16_t digit8,
uint16_t intensity,
uint16_t _shutdown,
uint16_t scanl,
uint16_t testmode,
uint16_t decodetype } Max7219_t;
在代码的后面,在我声明了这种类型的变量并添加了值之后,我需要一次传输一个 struct 中的每个字节,最好是在 for 循环中。
除了直接引用每个成员(即*display->digit1,然后是*display->digit2 等)之外,还有其他方法吗?本质上,有没有一种方法可以像使用数组一样枚举每个条目?
我不想只是将整个东西转换成一个数组,因为我几乎肯定会在以后的开发过程中向这个结构和其他结构添加不同的类型。
我觉得我在这里遗漏了一些明显的东西。我在想我可以只增加一个指针,但是因为结构成员的大小不一样,我觉得这不像指向数组的指针那样工作。另外,当迭代 for 循环时,我不确定像 for(q = 0; q != sizeof(Max7219_t); q++) 这样的东西是否也可以工作。
非常感谢任何帮助!
【问题讨论】:
-
because structure members aren't all the same size-- 在你的情况下? -
您希望此结构的成员大小为一个字节还是两个?
uint16_t是两个字节。 -
编译器有时会以不同的方式“打包”结构。
-
你的类型都是一样的,为什么结构里面没有数组呢?
-
为什么要转
each byte in the struct one at a time?大多数人会一次性移动所有数据。了解这一点可能有助于我们为您提供更好的解决方案。