C语言中的struct

时间:2018-01-10 07:50:20

标签: c linux pointers struct syntax

在学习设备驱动程序时,我会碰到下面的代码。

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中的已分配内存(通过指针访问)但不像“。”那样访问。

  • 使用struct like array是什么意思(例如CHRDEV_MAJOR_HASH_SIZE)
  • 如果它只是定义struct数组,那么使用val_b之类的区别是什么。

抱歉英语不好。 非常感谢你。

1 个答案:

答案 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;

但这只会访问数组的第一个元素。