我想做的是:
#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 并在初始化中使用这些 token 。
如果有人可以向我展示执行此操作的正确语法,我将不胜感激。谢谢。
最佳答案
我猜这是指 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 之前,唯一的文字类型是字符串文字,并且您想要做的事情是不可能的;您必须使用第一种方法,或者对您的定义系统进行重大更改。
请注意,在此代码中无法得知每个字符系列的长度。您将需要添加一些确定长度的方法(例如末尾的标记值)。
关于c - 如何初始化指向不同长度的字符数组的指针数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23818466/