Las respuestas C FAQ precisamente esta pregunta. La respuesta rápida es que esta estructura incluirá la matriz double
dentro de la estructura en lugar de un puntero a una matriz fuera de la estructura. Como un ejemplo rápido, podría utilizar su estructura como en este ejemplo:
struct s mystruct = malloc(sizeof(struct s) + 5 * sizeof(double));
s.n = 12;
s.d[0] = 4.0;
s.d[1] = 5.0;
s.d[2] = 6.0;
s.d[3] = 7.0;
s.d[4] = 8.0;
Y así sucesivamente - el tamaño de la matriz que quiere está incluido en la asignación, y luego se puede usar como cualquier variedad . Normalmente, dicho tipo contiene el tamaño como parte de la estructura, ya que el uso del truco +
para omitir una matriz del tipo s
será necesariamente complicado por esta situación.
A su pregunta añadida '¿cómo se construyen más o menos potente que mantener un [puntero] como el segundo elemento?', No es más poderosa per se, pero no es necesario para mantener un puntero alrededor, por lo que ahorraría al menos ese espacio; también cuando está copiando la estructura, también copiará la matriz, en lugar de un puntero a una matriz, una diferencia sutil a veces, pero muy importante otras veces. 'You-can-do-it-in-multiple-ways' es probablemente una buena explicación, pero hay casos en los que desea específicamente un diseño u otro.
Ah, es un buen ejemplo que demuestra una vez más que las matrices y punteros no son en absoluto iguales :) – fredoverflow