当我研究设备驱动程序时,我遇到了下面的代码。
static struct char_device_struct{
struct char_device_struct *next;
...
} *chrdevs[CHRDEV_MAJOR_HASH_SIZE];
我认为它可能是定义结构体数组,所以我写了一个像下面这样的简单代码,发现了奇怪的事情。
struct a{
int _a;
} val_a[10];
struct b{
int _b;
};
struct b val_b;
int main(){
val_a->_a=10;
val_b._b=10;
return 0;
}
val_a 可以通过“->”访问,就像堆或 mmap 中分配的内存(通过指针访问)一样,但不能像“.”那样访问。
- 使用类似数组的结构意味着什么(例如 CHRDEV_MAJOR_HASH_SIZE)
- 如果它只是定义结构数组,那么与仅使用 val_b 有何区别。
抱歉英语不好。 非常感谢。
最佳答案
I thought it could be defining struct array,
不,它不是由结构组成的数组,而是保存指向结构的指针的数组。该代码定义了一个包含 CHRDEV_MAJOR_HASH_SIZE
指针的数组,没有任何结构体本身的内存。
在您的代码中,这将是
struct a{
int _a;
} *val_a[10];
然后你可以像这样使用它:
val_a[0] = malloc(sizeof(struct a));
val_a[0]->_a = 123;
(*val_a[0])._a = 123; // identical to previous line.
或者,如果您想使用该数组中的衰减指针:
*val_a = malloc(sizeof(struct a));
(*val_a)->_a = 123;
但这只会访问数组的第一个元素。
关于c - C语言中的结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48182596/