Un **
es sólo un puntero a un puntero. Así que cuando un instruction*
contiene la dirección de una estructura instruction
, un instruction**
contiene la dirección de un instruction*
que contiene la dirección de un objeto instruction
.
Para acceder al instruction
apuntado por el puntero apuntado por un instruction**
, solo usa dos asteriscos en lugar de uno, como (**p).repetitions
o algo similar.
Puede visualizarlo así:
instruction* ----> instruction
instruction** ----> instruction* ----> instruction
Recuerde, sin embargo, que simplemente se declara struct instruction** instructions;
no crea realmente una estructura instruction
. Simplemente crea un puntero que contiene un valor de basura. Vas a tener que inicializarlo:
struct instruction inst;
// set members of inst...
*instructions = &inst;
...
(*instructions)->repetitions++; // or whatever
Sin embargo, parece que estás usando una instruction**
para que apunte a una serie de instruction*
s. Para inicializar la matriz, se necesita un bucle de for
:
instructions = malloc(sizeof(struct instruction*) * num_of_arrays);
for (i = 0; i < num_of_arrays; ++i)
instructions[i] = malloc(sizeof(struct instruction) * size_of_each_subarray);
Y a continuación, se puede acceder a un elemento como instructions[i]->datamember
.
Podría ser una buena idea para no poner la pregunta en un comentario la línea de código. – takrl
Por favor, no etiquetes las preguntas C con C# si no sabes qué es C#. – BoltClock
Por favor, haga su pregunta fuera del bloque de código de lo contrario las personas no lo verán. Lo he editado y lo moví ahora. –