47 Stimmen

Mehrere Werte einem Array in C zuweisen

Gibt es eine Möglichkeit, dies in komprimierter Form zu tun?

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;

Etwas wie coordinates = {1.0f, ...}; ?

37voto

James Curran Punkte 98228

Wenn Sie wirklich wollen zuweisen. Werte (im Gegensatz zu initialisieren ), können Sie das so machen:

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

 return coordinates;

22voto

domen Punkte 1720

Obwohl in Ihrem Fall, nur einfache Initialisierung tun wird, gibt es einen Trick, um das Array in eine Struktur zu wickeln (die nach der Deklaration initialisiert werden kann).

Zum Beispiel:

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

12voto

Pavel Minaev Punkte 97251

Die alte Schule:

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;

4voto

Felix Kling Punkte 751464

Genau, du hast es fast geschafft:

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

4voto

paxdiablo Punkte 809679

Sie können verwenden:

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

aber dies ist eine Initialisierung zur Kompilierzeit - Sie können diese Methode im aktuellen Standard nicht verwenden, um neu zu initialisieren (obwohl ich glaube, dass es Möglichkeiten gibt, dies im kommenden Standard zu tun, was Ihnen vielleicht nicht sofort hilft).

Die beiden anderen Möglichkeiten, die mir in den Sinn kommen, sind, den Inhalt zu verschweigen, wenn er repariert ist:

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

oder stellen Sie eine Funktion bereit, die wie Ihr Initialisierungscode aussieht:

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);

unter Berücksichtigung dieser Ellipsen ( ... ) sind Platzhalter, nicht Dinge, die man buchstäblich in den Code einfügt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X