gpt4 book ai didi

c - 在 C 中声明后初始化数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:59 25 4
gpt4 key购买 nike

我正在尝试执行以下操作,但出现以下错误:

"error: expected expression before { token

Test_Stubs.h

#define SIGNATURE 0x78,0x9c

测试.c

#include "Test_Stubs.h"

static unsigned myArray[100];

static void
setup(void)
{
myArray = {SIGNATURE};
}

编辑

关注问题:

有没有办法将 #define 中的各个值分配给 myArray 的特定索引?例如……

#include "Test_Stubs.h"

static unsigned myArray[100];

static void
setup(void)
{
myArray[0] = SIGNATURE[0]; //0x78
myArray[1] = SIGNATURE[1]; //0x9c
}

显然上面的代码不会编码,因为 SIGNATURE 既不是数组也不是指针。

最佳答案

根据 C 语法规则,您只能在定义时使用大括号括起来的初始化列表来初始化数组。

之后,你必须逐个元素初始化,使用循环,或者,如果你需要将所有元素初始化为相同的值,你可以考虑使用memset()。 .


编辑:

不,正如我在评论中提到的,根据您的代码片段,SIGNATURE 既不是数组名称,也不代表任何数组类型,因此您不能对其使用索引。

但是,使用 compound literal (在 C99 及以上),如果你改变你的 #define,那么,不知何故,你可以让它工作。例如看下面的代码,

#include <stdio.h>

#define SIGNATURE ((unsigned [100]){0x78,0x9c})

static unsigned myArray[100];

int main (void)
{
myArray[0] = SIGNATURE[0]; //0x78
myArray[1] = SIGNATURE[1]; //0x9c

return 0;
}

查看 LIVE VERSION

关于c - 在 C 中声明后初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31405696/

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