/ / C - Asignar valores a struct (no puntero) recuperados de la matriz - c, arreglos, struct

C - Asignación de valores a struct (no puntero) recuperados de la matriz - c, arrays, struct

En primer lugar, me sorprendería si esto no fuera un duplicado. Sin embargo, no he logrado encontrar una pregunta que describa lo que estoy tratando de hacer.

Asi que aqui esta. Estoy tratando de crear una matriz de estructuras con un TAMAÑO de longitud definida:

#define SIZE 100

struct Link {
int number;
int id;
};

struct Link links[SIZE];

Luego estoy intentando ejecutarlo y asignar valores a los miembros de cada estructura:

int i;
for(i = 0; i < SIZE; i++) {
struct Link link = links[i];
link.number = i;
link.id = i + 100;
}

Pero los valores no están asignados, son siempre 0.

Esto parece funcionar, sin embargo:

    int i;
for(i = 0; i < SIZE; i++) {
#define link links[i]
link.number = i;
link.id = i + 100;
}

pero #define link links[i] me sigue dando un error que i no se puede resolver.

¿Estoy ignorando una solución obvia a esto? Estoy agradecido por cualquier ayuda, chicos!

Esto es parte de una tarea escolar, y creo que no se nos permite cambiar links Para ser una matriz de punteros.

EDITAR

He encontrado que haciendo links[i].something = something_else funciona, pero el struct Link Realmente tengo muchos miembros, haciendo que la solución sea un poco desordenada. Pero si es la única alternativa, la seguiré.

Respuestas

3 para la respuesta № 1
int i;
for(i = 0; i < SIZE; i++) {
links[i].number = i;
links[i].id = i + 100;
}

0 para la respuesta № 2

Si tiene muchos elementos de estructura para asignar y quiere escribir un poco menos (no que cambie mucho, para eso es para qué copiar y pegar), también podría usar:

int i;
struct link *link;
for(i = 0; i < SIZE; i++) {
link=links+i;                  // which is equivalent to link=&links[i];
link->number = i;              // equivalent to (*link).number = i;
link->id = i + 100;
}