【问题标题】:how to initialize char *** from string liertal如何从字符串liertal初始化char ***
【发布时间】:2022-11-17 19:34:41
【问题描述】:

但我想知道如何在 c 中初始化 char ***。
初始化 char* :

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

下面是初始化char **。

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

到目前为止,我尝试初始化 char ***:

// char ***test = (*(char *[])) {{"hello"}, {"world"}};
//char ***test = ((char **)[]) {{"hello"}, {"world"}};

旨在实现,使用文本字符串文字初始化一个char***。 然后我可以使用printf("tets[1]=%s\n",(*test)[1])打印出world

【问题讨论】:

  • 目前尚不清楚您要实现的目标。这个问题没有意义。
  • 如何从茶包初始化陶罐?很多方法:我可以在壶里装满茶袋,然后在上面写上“茶袋”,或者我可以在里面装满热水,然后放一个茶袋进去,或者我可以这样做,泡好茶,然后把它拿出来,或者我可以切开茶袋,将里面的东西倒进壶里——一切都取决于我想要的结果。你的问题是这样的。你想要一个指向一个指针的指针,一个指针指向一个指向字符串的指针吗?
  • @user253751 我更新了正确的问题。希望它会变得清晰。基本上从字符串字面量是可以构造一个char ***的。
  • @jian 是否可以用茶包初始化陶罐?
  • 您希望test[0] 成为指向char * 类型元素数组的指针还是应该指向单个char *

标签: c


【解决方案1】:

可以另外创建一个复合文字,它只是一个 char** 类型的对象,它指向您在问题中定义的数组的第一个元素,并使 char *** 指向这个 char ** 对象:

#include <stdio.h>

int main( void )
{
    char ***test = &(char**){ (char *[]){"hello", "world" } };

    printf( "test[1]=%s
", (*test)[1] );
}

该程序具有所需的输出 world

然而,添加这个额外的间接层没有多大意义。像您在问题代码中所做的那样,简单地使用 char** 而不是 char*** 会更有意义。

【讨论】:

    猜你喜欢
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 2012-09-15
    相关资源
    最近更新 更多