在C语言中的字面量数组

20

我在对“字面数组(literal array)”的定义上可能有所错误。我指的是以下内容:

{0x00, 0x01, 0x03}

我有一个函数接受一个如下所示的数组:

void mote(char arry[]){}

当我调用这个函数时,我希望能够做到以下几点:

mote({0x00, 0x01, 0x03})

然而我的编译器(C30)报以下错误:

error: syntax error before '{' token

我也尝试使用这些方括号 -> [ ],但仍然收到相同的错误。

我的问题

1)是否可能将文字数组传递给函数?

2)如果是,如何做到?

提前感谢您所有人。


是的,那是类似的问题,谢谢。 - user1167219
2个回答

34

这种语法被称为数组初始化器。因此,它只能在定义数组时使用。

C11(n1570),§6.7.9 初始化

initializer:
    assignment-expression
    { initializer-list }
    { initializer-list , }
然而,在C99中,可以使用复合字面量来实现这一点:
mote((char[]){0x00, 0x01, 0x03});

3
注意:如果可以将函数定义为接受 const char arry[] 作为参数(很有可能,因为传递一个复合字面量意味着调用者不需要结果,所以除非函数将其用作临时空间,否则应该可以将其设为 const),那么传递 (const char[]){0x00, 0x01, 0x03} 可以让编译器使用静态存储空间(嵌入在二进制的常量部分中)与字符串字面量共享;没有 const(并且在不合并字符串字面量的编译器上),在全局范围之外,该字面量将在每次使用时重新构造(它只有自动存储期限)。 - ShadowRanger

9
如果不支持C99,请尝试这个:
char cp[] = {0x01, 0x02, 0x03};
mote (cp);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接