如何在此结构中初始化表DetectionSensors
:
typedef struct
{
DetectionSensor *DetectionSensors[];
unsigned char nbSensors;
} SENSOR_STRUCT;
SENSOR_STRUCT my_var = { } ?
此表仅包含一些DetectionSensor指针;
答案 0 :(得分:2)
你不能;显示的结构定义不应该编译。
typedef struct
{
DetectionSensor *DetectionSensors[]; // Not C
unsigned char nbSensors;
} SENSOR_STRUCT;
如果您正在尝试使用灵活的数组成员(FAM),那么它必须是结构中的最后一个字段,并且您无法为包含FAM的结构编写初始值设定项。
否则,您需要为数组的维度使用显式大小,或者丢失数组表示法并使用DetectionSensor *DetectionsSensors;
(或者可以想象,但似乎难以置信)DetectionSensor **DetectionSensors;
。
typedef struct
{
DetectionSensor *DetectionSensors[10]; // Use an enum or #define
unsigned char nbSensors;
} SENSOR_STRUCT;
有了这个,你需要一些DetectionSensor
:
DetectionSensor ds[10];
SENSOR_STRUCT my_var = { { &ds[0], &ds[1], &ds[2], &ds[3] }, 4 };
一般情况下,请为宏保留ALL_CAPS(尽管有FILE
和DIR
)。
答案 1 :(得分:0)
如果您打算使用预定义的Detectionsensor集初始化结构,您可以这样做。
DetectionSensor sample [] = {sensor1, sensor2];
my_var.DetectionSensors = sample;
答案 2 :(得分:0)
您应该为DetectionSensors保留一些内存,例如:这样:
#define MAX_SENSORS 10
typedef struct
{
DetectionSensor *DetectionSensors[MAX_SENSORES];
unsigned char nbSensors;
} Sensor_Struct;
Sensor_Struct my_var;
myvar.DetectionSensors[0] = somePointer;
my_var.nbSensors = 1;
btw:CAPS_LOCKED_NAMES按惯例用于预处理程序变量(#define SOMETHING abc
)
如果需要,您可以提供添加新传感器的功能,甚至可以使内存动态使用。
答案 3 :(得分:0)
C struct
没有自动构造函数,首先需要构建DetectionSensors
数组,然后将该数组的值赋给SENSOR_STRUCT
中的DetectionSensor变量。
typedef struct
{
DetectionSensor * DetectionSensors;
unsigned char nbSensors;
} SENSOR_STRUCT;
DetectionSensor * sensors = ...; //get your detection sensors.
SENSOR_STRUCT my_var = {sensors, ... };