首页 > 解决方案 > 如何将指针分配给结构内的数组?

问题描述

typedef struct
{
  uint8_t (*flags)[5];
} type_t;

void setstate(type_t* driver, uint8_t flag)
{
  driver->flags[flag] = 1;
}

void printall(type_t* driver)
{
  for (int a = 0; a < 5; a++)
  {
    printf("%d\n", driver->flags[a]);
  }
}

int main(int argc, char** argv) 
{
  static type_t driver[1];
  uint8_t (*states)[5] = { 0 };

  driver->flags = states;

  setstate(driver, 2);
  printall(driver);
}

我想将本地数组指针分配给结构内的数组指针,但我似乎无法让它工作..谢谢。

标签: arrayscpointersstruct

解决方案


您的局部变量states也是指向数组的指针。我认为您的意思是声明一个实际的数组?然后将指向该数组的指针分配给结构中的字段?反正文是这么说的。您的初始化程序的编写方式,使用 0 而不是 NULL 并在其周围加上额外的 { },我认为您认为您确实声明了一个数组(那么*?)。

uint8_t states[8];

现在您通常不声明指向整个数组的指针,而是声明指向与数组元素相同类型的指针。所以结构字段将是:

uint8_t* flags;  // points to first of 8 consecutive values

然后你可以写

driver->flags= states;

这将意味着。

虽然driver是一个 1 的数组,但将其称为这样的指针是很奇怪的。如果只有一个元素,那么将其设为数组有什么意义?


推荐阅读