gpt4 book ai didi

c - 如何在函数中初始化结构数组?

转载 作者:行者123 更新时间:2023-12-01 06:15:35 25 4
gpt4 key购买 nike

在下面的 make_quad() 函数中,如何为 quad_t 结构中的 vertex_color 数组设置默认值?

/* RGBA color */
typedef struct {
uint8_t r,g,b,a;
} rgba_t;

/* Quad polygon - other members removed */
typedef struct {
rgba_t vertex_color[ 4 ];
} quad_t;

在其他地方,一个创建和初始化四边形的函数:

quad_t *make_quad() {
quad_t *quad = malloc( sizeof( quad_t ) );
quad->vertex_color = ??? /* What goes here? */
return ( quad );
}

显然我可以这样做:

quad->vertex_color[ 0 ] = { 0xFF, 0xFF, 0xFF, 0xFF };
...
quad->vertex_color[ 3 ] = { 0xFF, 0xFF, 0xFF, 0xFF };

但是这个:

quad->vertex_color = {
{ 0xFF, 0xFF, 0xFF, 0xFF },
{ 0xFF, 0xFF, 0xFF, 0xFF },
{ 0xFF, 0xFF, 0xFF, 0xFF },
{ 0xFF, 0xFF, 0xFF, 0xFF }
};

...导致“错误:‘{’标记前的预期表达式”。

编辑:修正了几个拼写错误

最佳答案

您的代码中有许多错误,我已在此处全部更正。 quad_t已在 <sys/types.h> 中定义所以我把它改成了myquad_t .

基本上,您不能静态初始化在运行时动态分配的内存,所以您可以做的是创建一个在编译时初始化的全局变量,然后使用 memcpy复制到动态分配的内存中。

这里是对designated initializers的解释.

#include    <stdlib.h>
#include <string.h>
#include <stdint.h>

/* RGBA color */
typedef struct rgba {
uint8_t r,g,b,a;
} rgba_t;

/* Quad polygon - other members removed */
typedef struct quad {
rgba_t vertex_color[ 4 ];
} myquad_t;

static const myquad_t init_quad = {
.vertex_color[ 0 ... 3 ] = { 0xFF, 0xFF, 0xFF, 0xFF }
};

myquad_t *make_quad() {
myquad_t *q = malloc( sizeof( myquad_t ) );
memcpy(q , &init_quad, sizeof( myquad_t ) );
return ( q );
}

int main(void) {

myquad_t * q = make_quad();

return 0;
}

关于c - 如何在函数中初始化结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3031469/

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