You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中使用字符串字面量初始化char ***

C语言中char***的字符串字面量初始化方法

已掌握的基础初始化

char* 初始化

char *test = "hello";
printf("test[0]=%s\n", test);

char** 初始化

char **test = (char *[]) {"hello", "world"};
printf("test[1]=%s\n", test[1]);

错误写法的问题分析

你尝试的两种写法都未正确构建三级指针的层级结构:char***本质是指向char**类型数组的指针,需要先构建多个char**元素,再将这些元素的地址组成数组,最终让char***指向该数组。

正确的初始化实现

要满足通过printf("test[1]=%s\n", (*test)[1])打印"world"的需求,可通过复合字面量完成层级构建:

完整示例

char ***test = (char **[]) {
    (char *[]) {"hello", "world"},  // 第一个char**对象,包含两个字符串字面量
    (char *[]) {"foo", "bar"}       // 可选的第二个char**对象
};

// 按需求打印"world"
printf("test[1]=%s\n", (*test)[1]);

简化版(仅满足打印需求)

如果只需要最小结构来实现目标输出,可简化为:

char ***test = (char **[]) { (char *[]) {"hello", "world"} };
printf("test[1]=%s\n", (*test)[1]);  // 输出: world

关键说明

  • (char **[])用于将内部的复合字面量数组强转为char**类型数组,char***指向该数组的首地址。
  • (*test)取到数组的第一个char**元素,(*test)[1]即对应该char**中索引为1的字符串"world"。
  • 若需要复合字面量在局部作用域外仍有效,可添加static修饰:
    char ***test = (char **[]) { static (char *[]) {"hello", "world"} };
    

内容的提问来源于stack exchange,提问作者jian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:05:56