Hice un typedef para las matrices de flotación, así:Typedef una red de flotadores sin restricciones en C
typedef float fooType[];
De modo que pueda declarar e inicializar arrays de flotación estática como esto:
fooType myArray = {1.0, 2.0, 3.0}
Eso funciona multa. Puedo decir myArray[2]
sin problemas y generalmente uso mi fooType
como me gustaría. En el contexto de mi programa, está muy claro que fooType
es un tipo de matriz (en realidad es una tabla de búsqueda gigante) por lo que no estoy simplemente haciendo typedef float fooType
.
¿Cómo declaro y uso una variable para señalar a bar
y acceder a los elementos de bar
? No puedo declarar una variable simple como esto:
fooType bar = myArray;
Dado que los errores con invalid initializer
; No esperaba que funcionara porque el compilador no sabe cuánta memoria asignar. He intentado algunas cosas con punteros:
fooType *bar = myArray;
Esto da una advertencia: initialization from incompatible pointer type
y errores cuando accedo a los elementos con bar[1]
.. Esto declara bien, como me esperaba que ya que los tipos coinciden ahora:
fooType *bar = &myArray;
Pero por encima de los errores de compilación con un invalid use of array with unspecified bounds
cuando digo bar[1]
.
Esto funciona:
float *bar = myArray;
float val = bar[3];
Pero yo no quiero porque pierdo la legibilidad de mi typedef.
He estado enterrado durante mucho tiempo en un tierno mundo de OO (Java), así que espero entender de esto lo idiomático en C en esta situación. Estoy bastante preparado para cambiar mi uso del typedef para adecuarme a la convención si no hay una solución directa. Tengo la sensación de que sí lo hay, y no es complicado.
Gracias
La conclusión es que ** no ** quieres hacer typedefs para matrices ... Puedes, pero luego te enfrentas a todos esos "problemas". Por ejemplo, esta cosa 'fooType myArray = {1.0, 2.0, 3.0}; fooType bar = myArray; 'significa' float myArray [] = {1.0, 2.0, 3.0}; barra de flotación [] = myArray; '¿Es legible? :) Otro "rompecabezas" es cuando defines un prototipo de función que toma 'fooType' como _output_ argument. (Similar a 'memset', etc.) – debleek63
Eso ya está claro @ debleek63. Gracias. –