gpt4 book ai didi

c - 为什么临时 char** 参数是非法的?

转载 作者:太空狗 更新时间:2023-10-29 16:24:18 26 4
gpt4 key购买 nike

我有一个函数,f(char **p),我想以最简单的方式调用它。

我试过了

char ** p = {"a", "b"};
f(p);

得到:

scalar object requires one element in initializer

所以我改成了

char * p[2] = {"a", "b"};
f(p);

一切顺利 [只要 char * p[] 也可以。

为什么我不能像下面这样即时创建一个指针数组?

f({"a", "b"});

最佳答案

这给出了一个警告:

char ** p = {"a", "b"};

因为 p 不是数组。

这也是不合法的:

f({"a", "b"});

因为花括号本身在表达式中是不允许的(但可以用作初始值设定项)。

可以像使用复合字面值那样动态创建数组:

f((char *[]){"a", "b"});

您还可以使用复合字面量来初始化临时对象:

char ** p = (char *[]){"a", "b"};

与第一个语句不同,这是有效的,因为文字是 char *[2] 类型的数组,并且会衰减为可以使用的 char **初始化这种类型的变量。

参见 C standard 的第 6.5.2.5 节有关复合文字的更多详细信息。

关于c - 为什么临时 char** 参数是非法的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53083520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com