如何初始化一个指向不同长度的char数组的指针数组?

时间:2014-05-22 23:03:56

标签: c arrays pointers char initialization

我想做的是:

#define A 1
#define B 2
#define C 99
const char row1[] = {A|B, B, A, C};
const char row2[] = {B, A, C};
...
const char row99[] = {B, A, B ,A, A, C};
const char *test[]= {row1, row2, ... , row99};

我的问题是如何通过以下方式实现上述目标:

#define A 1
#define B 2
#define C 99
const char *test[] = {
    {A|B, B, A, C},
    {B, A, C},
     ....
    {B, A, B ,A, A, C} 
}

我不想要像这样固定长度的2D数组:

test[][5] = { {A|B, B, A, C}, {B, A, C}, ...

我还需要#define并在初始化中使用这些令牌。

非常感谢,如果有人能告诉我正确的语法来做到这一点。日Thnx。

1 个答案:

答案 0 :(得分:1)

我猜这是指C.在C99你可以这样做:

char const *const test[] = {
    (char const[]){1, 2, 3, 4},
    (char const[]){1, 2, 3},
    (char const[]){1, 2, 3, 4, 5, 6, 7}
};

(typename[]){initializer-list}语法称为复合文字。在C99之前,唯一的文字类型是字符串文字,你想做的事情是不可能的;您必须使用第一种方法,或对您的定义系统进行重大更改。

请注意,在此代码中,无法确定每个char系列的长度。您需要添加一些确定长度的方法(例如,结尾处的标记值)。