在C中为数组分配多个值

有没有办法以浓缩forms这样做?

GLfloat coordinates[8]; ... coordinates[0] = 1.0f; coordinates[1] = 0.0f; coordinates[2] = 1.0f; coordinates[3] = 1.0f; coordinates[4] = 0.0f; coordinates[5] = 1.0f; coordinates[6] = 0.0f; coordinates[7] = 0.0f; return coordinates; 

coordinates = {1.0f, ...};

如果你真的要分配值(而不是初始化 ),你可以这样做:

  GLfloat coordinates[8]; static const GLfloat coordinates_defaults[8] = {1.0f, 0.0f, 1.0f ....}; ... memcpy(coordinates, coordinates_defaults, sizeof(coordinates_defaults)); return coordinates; 

老派方式:

 GLfloat coordinates[8]; ... GLfloat *p = coordinates; *p++ = 1.0f; *p++ = 0.0f; *p++ = 1.0f; *p++ = 1.0f; *p++ = 0.0f; *p++ = 1.0f; *p++ = 0.0f; *p++ = 0.0f; return coordinates; 

有一个技巧可以将数组包装成一个结构(可以在声明后初始化)。

即。

 struct foo { GLfloat arr[10]; }; ... struct foo foo; foo = (struct foo) { .arr = {1.0, ... } }; 

确实,你几乎得到了它:

 GLfloat coordinates[8] = {1.0f, ..., 0.0f}; 

您可以使用:

 GLfloat coordinates[8] = {1.0f, ..., 0.0f}; 

但这是一个编译时初始化 – 您不能在当前标准中使用该方法重新初始化(尽管我认为在即将推出的标准中有一些方法可以做到这一点,这可能无法立即帮助您)。

如果它们被修复,另外两种让人想起的方法是抨击内容:

 GLfloat base_coordinates[8] = {1.0f, ..., 0.0f}; GLfloat coordinates[8]; : memcpy (coordinates, base_coordinates, sizeof (coordinates)); 

或者提供一个看起来像你的初始化代码的函数:

 void setCoords (float *p0, float p1, ..., float p8) { p0[0] = p1; p0[1] = p2; p0[2] = p3; p0[3] = p4; p0[4] = p5; p0[5] = p6; p0[6] = p7; p0[7] = p8; } : setCoords (coordinates, 1.0f, ..., 0.0f); 

请记住,这些省略号( ... )是占位符,而不是字面上插入代码中的东西。

如果你在程序中做了很多同样的任务并想要一个快捷方式,那么最简单的解决方案可能就是添加一个函数

 static inline void set_coordinates( GLfloat coordinates[static 8], GLfloat c0, GLfloat c1, GLfloat c2, GLfloat c3, GLfloat c4, GLfloat c5, GLfloat c6, GLfloat c7) { coordinates[0] = c0; coordinates[1] = c1; coordinates[2] = c2; coordinates[3] = c3; coordinates[4] = c4; coordinates[5] = c5; coordinates[6] = c6; coordinates[7] = c7; } 

然后简单地打电话

 GLfloat coordinates[8]; // ... set_coordinates(coordinates, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f); 
 typedef struct{ char array[4]; }my_array; my_array array = { .array = {1,1,1,1} }; // initialisation void assign(my_array a) { array.array[0] = a.array[0]; array.array[1] = a.array[1]; array.array[2] = a.array[2]; array.array[3] = a.array[3]; } char num = 5; char ber = 6; int main(void) { printf("%d\n", array.array[0]); // ... // this works even after initialisation assign((my_array){ .array = {num,ber,num,ber} }); printf("%d\n", array.array[0]); // .... return 0; }