在学习设备驱动程序时,我会碰到下面的代码。
static struct char_device_struct{
struct char_device_struct *next;
...
} *chrdevs[CHRDEV_MAJOR_HASH_SIZE];
我认为它可能是定义struct数组,所以我在下面编写了一个简单的代码并发现了奇怪的东西。
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中的已分配内存(通过指针访问)但不像“。”那样访问。
抱歉英语不好。 非常感谢你。
答案 0 :(得分:2)
我认为它可以定义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;
但这只会访问数组的第一个元素。