使用Typedef在C中进行数组初始化

时间:2013-10-29 10:34:06

标签: c arrays initialization

尝试在C中初始化数组时出现奇怪错误 - 有人知道为什么会发生这种情况吗?

我有一个全局变量:

static my_type foo[6];

在包含的头文件中,我有:

typedef uint32_t my_type[5];

然后我在与全局变量相同的文件中的函数中尝试执行:

foo = {{1, 2, 3, 4, 5}, {1, 2, 3, 4, 6}, {1, 2, 3, 4, 7}, {1, 2, 3, 4, 8}, {1, 2, 3, 4, 9}, {1, 2, 3, 4, 10}};

编译器(GCC4)在'{'token'之前给出错误'expected expression'。

任何人都知道出了什么问题以及如何解决它?

干杯!

2 个答案:

答案 0 :(得分:4)

那不是初始化,那是分配。初始化必须是一个声明:

static my_type foo[6] = {{1, 2, 3, 4, 5},
                         {1, 2, 3, 4, 6},
                         {1, 2, 3, 4, 7},
                         {1, 2, 3, 4, 8},
                         {1, 2, 3, 4, 9},
                         {1, 2, 3, 4, 10}};

使用此语法无法在C89中分配整个数组。你可以做的是来自memcpy的{​​{1}}:

const

答案 1 :(得分:4)

如果你在C99下:

  

ISO C99支持复合文字。复合文字看起来像一个   包含初始化器的转换器。它的值是该类型的对象   在强制转换中指定,包含在中指定的元素   初始化;这是一个左值。作为扩展,GCC支持化合物   C89模式和C ++中的文字。

foo必须是指针

#include <stdio.h>
#include <stdint.h>

typedef uint32_t my_type[5];

int main(void)
{
    int i, j;
    my_type *foo;

    foo = ((my_type[]) {
      {1, 2, 3, 4, 5},
      {1, 2, 3, 4, 6},
      {1, 2, 3, 4, 7},
      {1, 2, 3, 4, 8},
      {1, 2, 3, 4, 9},
      {1, 2, 3, 4, 10}
    });
    for (i = 0; i < 6; i++) {
        for (j = 0; j < 5; j++) {
            printf("%d ", foo[i][j]);
        }
        printf("\n");
    }
    return 0;
}