c同时初始化数组和结构

大卫·梅伦德斯(David Melendez)

我正在尝试初始化数组及其包含的结构

#include <stdio.h>
#include <math.h>

typedef struct
{
    int  rgbtBlue;
    int  rgbtGreen;
    int  rgbtRed;
} __attribute__((__packed__))
RGBTRIPLE;

void edges(int height, int width, RGBTRIPLE image[height][width]);

int main()
{
    int height = 3;
    int width = 3;
    RGBTRIPLE image[height][width] = {
        {{0, 10, 25}, {0, 10, 30}, {40, 60, 80}},
        {{20, 30, 90}, {30, 40, 100}, {80, 70, 90}},
        {{20, 20, 40}, {30, 10, 30}, {50, 40, 10}}
    };
    return 0;
}

我不确定这种初始化是否可以同时发生,或者在将它们插入数组之前是否必须先初始化所有结构。

埃里克·波斯蒂奇

定义数组时,可以为数组中的元素(包括数组中的结构成员)提供初始值。

C标准表示要初始化的事物不得具有可变长度数组类型(C 2018 6.7.9 3)。您的数组具有可变长度数组类型,因为heightwidth是变量,而不是C定义它们的常量。要解决此问题,您可以使用#define指令或enum声明来定义heightwidth

如果确实需要可变长度数组或动态分配的数组,则可以使用赋值语句为其元素提供值,包括使用每个结构复合文字整个结构进行赋值,如下所示:

image[i][j] = (RGBTRIPLE) { 0, 10, 25 };

但是,C标准没有提供任何方法在创建过程中为可变长度数组或动态分配的数组提供初始值。通过优化,在创建数组后立即分配值可能等同于在创建过程中对其进行初始化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章