c - 如何初始化指向不同长度的字符数组的指针数组?

标签 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} 
}

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

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/

相关文章:

javascript - 仅将重复项从数组推送到新数组(以便它们可以加在一起)

javascript - 将数组组转换为对象

c - 正确填充结构成员的函数

c - Valgrind 发现内存泄漏,但我无法理解

PHP If 语句混淆

c++ - C++中删除指针对象

c - 为什么 argv 可以使用自增运算符

c# - 将 C 结构数组编码为 C#

c - glPopMatrix() 大喊 "unsupported texture format in setup_hardware_state"

C++下载多个文件