¿Está bien recorrer una matriz en blanco o debo poner un valor primero?

¿Necesito almacenar un valor en una matriz antes de recorrerlo? Funciona correctamente sin almacenar un valor, pero ¿cuál es la forma "correcta"?

int ary3[1000000] = {};
//int ary3[100000] = {0}; //or should I store a value first

for (int i = 0; i < sizeof(ary3) / sizeof(int); i++) {
    printf("%d = %d\n", i, ary3[i]);
}

He hecho una corrección. No quiero almacenar ningún valor primero. Solo quiero mostrar los índices inmediatamente después de la declaración.

preguntado el 08 de noviembre de 11 a las 18:11

3 Respuestas

Tu no que inicialice la matriz, siempre que pueda seguir una regla básica:

Su programa siempre debe saber qué miembros de la matriz se han inicializado antes de intentar acceder a ellos.

En su caso, primero está recorriendo toda la matriz y configurando valores iniciales en función de su índice. Después de tu primera for bucle, todos los valores en su matriz se han inicializado, por lo que puede continuar sin ninguna verificación. Eliminado según la edición de la pregunta.

Sin embargo, si solo fuera parcialmente Al inicializar la matriz al principio, todo el código que sigue a eso (al menos, hasta que pueda determinar que la matriz se ha inicializado por completo) tendría que tener algún tipo de protección para evitar que utilice una posición no inicializada en la matriz.

En resumen, si no puedes ser 100% seguro que su código no intentará leer un miembro no inicializado de la matriz, asegúrese de que su primer paso sea inicializar toda la matriz a un valor sano.

respondido 08 nov., 11:22

No está bien no inicializar una matriz a menos que de alguna manera esté realizando un seguimiento de qué índices se inicializan y cuáles no. La razón es que accederá a cierta basura o memoria a la que no se le permite el acceso. Además, si otros programadores empezaron donde lo dejaste, es posible que obtengan resultados extraños.

Además, evita los números mágicos.

respondido 09 nov., 11:01

¡Gracias! Esta es la respuesta concisa que estaba buscando: Julian Tai

Solo ha mostrado un fragmento de código y la respuesta depende de algo que no muestre.

Si la matriz es "global" (es decir, tiene una duración estática), el sistema la inicializará a cero. En este caso, realmente no importa si usted pone el valor o no.

Por otro lado, si la matriz es local, si no la inicializa, contendrá basura. Si inicializa a cero (incluso si solo tiene un inicializador simple como {0}, el entorno de ejecución lo inicializará. Por lo tanto, si planea inicializarlo usted mismo, se aplicará una penalización doble si primero almacena un valor en él.

respondido 08 nov., 11:22

La matriz se encuentra dentro de main () {...}, en este caso, ¿se inicializaría a 0 generalmente? - Julian Tai

No, si no tiene inicializador, el contenido estará indefinido. - Lindydancer

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.