【问题标题】:Literal array in C [duplicate]C中的文字数组[重复]
【发布时间】:2013-04-19 12:35:50
【问题描述】:

我对字面量数组的定义可能有误。我将以下内容称为一个:

{0x00, 0x01, 0x03}

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

void mote(char arry[]){}

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

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

但是我的编译器(C30)报错如下:

error: syntax error before '{' token

我也尝试了上面这些括号 -> [ ] 但我仍然得到同样的错误。

我的问题

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

2) 如果是,怎么做?

提前谢谢大家

【问题讨论】:

  • 是的,这是类似的问题,谢谢

标签: c


【解决方案1】:

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

C11 (n1570),第 6.7.9 节初始化

initializer:
    assignment-expression
    { initializer-list }
    { initializer-list , }

但是,在 C99 中,可以使用 复合文字

mote((char[]){0x00, 0x01, 0x03});

【讨论】:

  • 注意:如果函数可以使用const char arry[](很可能,因为传递复合文字的事实意味着调用者不需要结果,所以除非函数正在使用它作为暂存空间,应该可以将其设为const),传递(const char[]){0x00, 0x01, 0x03} 允许编译器使用与字符串文字共享的静态存储(烘焙到二进制的常量部分);没有const(以及在不合并字符串文字的编译器上),在全局范围之外,文字将在每次使用时重建(它只有自动存储持续时间)。
【解决方案2】:

如果不支持 C99,试试这个:

char cp[] = {0x01, 0x02, 0x03};
mote (cp);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-15
    • 2015-06-14
    • 1970-01-01
    • 2017-02-16
    • 2016-02-24
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    相关资源
    最近更新 更多