具有未定义长度但只有一个int元素的数组的用途是什么?

时间:2017-03-08 12:10:18

标签: c arrays struct

我有一个声明这些数组的头文件:

int stVal_On[] = {2};
int stVal_Off[] ={1};
int subVal_On[]={1};
int subMss[]={1};
int subVal_Off[]={0};

然后在声明的结构中使用解除引用的数组:

enter image description here

WriteData struct的定义:

/* Write structure used in loop for Read- and Write Tests */
typedef struct WriteData {
    char* name;                 // MMS object name
    const VOID* data;           // Data to write
    const SINT32 localFormat;   // SVI type (on server)
    const SINT32 dataLength;    // length of data to write/read
    const SINT32 NbrofElmnts;   // Number of elements to write/read
    char* description;          // SVI type as String (on server)
    char* SVI_Name;             // SVI address of the SVI mapped on server
    UINT32 svi_Length;          // length of SVI variable on server (used for readback)
} WriteData;

这个int arr[] = {1};成语的目的是什么?如果只分配了一个值,为什么要使用数组?

2 个答案:

答案 0 :(得分:5)

嗯,我能想到的一个原因与代码组织有关。如果您以表格形式编写代码:

struct {
  char const *file_name;
  uint16_t    flags;
  // Other data
} table [] = {
  { .file_name = "/usr/bin/foo", .flags = 0x0 },
};

for (size_t i = 0; i < sizeof(table)/sizeof(table[0]); ++i) {
  // do something meaningful with a table row table[i]
}

虽然它现在只是一个1的数组,如果你需要添加更多的情况,你的代码已经很好地编写了。您只需添加另一行&#34;行&#39;到表初始化程序。

答案 1 :(得分:4)

所有定义都只使用一个元素创建数组,为true。实际用例可能会有所不同。

一个commonly used scenario,这个变量可以作为函数参数传递,并且可以从被调用的函数中更改数组的内容(唯一的元素值),如果是非数组变量是不可能的。这可能不是非常智能方式,但仍然可以,并且有人选择使用它。

此外,与往常一样,由提供的初始化程序确定的数组大小会留下扩展空间,而无需更改主要代码。