2014-05-22 157 views
0

我想要做的是这样的:如何初始化指向不同长度的char数组的指针数组?

#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} 
} 

我不想固定长度的二维数组是这样的:

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

而且我还需要#define并在初始化中使用这些标记。

非常感谢,如果任何人都可以告诉我正确的语法来做到这一点。日Thnx。

+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系列有多长。您需要添加一些确定长度的方法(例如结尾的标记值)。