我正在尝试初始化数组及其包含的结构
#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)。您的数组具有可变长度数组类型,因为height
和width
是变量,而不是C定义它们的常量。要解决此问题,您可以使用#define
指令或enum
声明来定义height
和width
。
如果确实需要可变长度数组或动态分配的数组,则可以使用赋值语句为其元素提供值,包括使用每个结构的复合文字对整个结构进行赋值,如下所示:
image[i][j] = (RGBTRIPLE) { 0, 10, 25 };
但是,C标准没有提供任何方法在创建过程中为可变长度数组或动态分配的数组提供初始值。通过优化,在创建数组后立即分配值可能等同于在创建过程中对其进行初始化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句