2011-01-16 31 views
9

¿Cuáles son los valores por defecto de arreglos como:Los valores por defecto en la matriz

char c[20]; 

?

BTW, ¿Hay alguno?

+0

Relacionado es que la lectura de una variable no inicializada conduce a [comportamiento indefinido] (http://stackoverflow.com/questions/4259885/why-do-i-see-strange-values-when-i-print-uninitialized-variables/4259991 # 4259991). – GManNickG

Respuesta

3

No definido o en un lenguaje menos técnico - al azar.

Su compilador (al menos en modo de depuración) puede establecerlo en un valor particular para la prueba.

Y, por supuesto, a partir de una interpretación estricta de Copenhague de la teoría cuántica, el valor que tiene es indeterminado (utilizado en su sentido correcto) hasta que se contrae la función de onda midiéndola.

+0

Como se indica a continuación, esto NO está indefinido. La diferencia entre el comportamiento indefinido y otras categorías de desconocido se discutió en varias preguntas de SO (resultados principales en google cuando busqué el siguiente enlace), y en mi opinión la mejor explicación de lo que eso significa en c-faq: http: //c-faq.com/ansi/undef.html (el hecho de que estamos hablando de C++ en lugar de C realmente no importa aquí, y cada programador debe leer esto, introduzca las preguntas frecuentes al menos dos veces). – conio

+0

ok los valores se definen como indeterminados - ¿todos están contentos ahora? –

15

Si declarado en alcance espacio de nombres entonces c tendrá alcance de almacenamiento estático y será cero-inicializado por lo que cada elemento de c tendrá un valor '\0'.

Si se declara en una función, entonces c no se inicializará. El valor inicial de los elementos de c será indeterminado.

1

Como ya se dijo, los valores son indeterminados. Pero, debo mencionar que si su matriz es estática o global, los valores se inicializan a sus valores predeterminados, lo que generalmente significa que se inicializarán en ceros (o '\ 0' en el caso de una matriz de caracteres).

EDITAR: Como sugirió Noah Roberts, el término "indeterminado" es probablemente más apropiado que "indefinido" (estrictamente hablando matemáticamente), por lo que la sugerencia es aceptada y he cambiado el término a "indeterminado". Pero la mayoría de nosotros somos ingenieros o programadores aquí, no matemáticos (supongo) y omisiones similares deben ser perdonadas :))

+0

"indefinido" frente a "indeterminado" son términos de C++. Pueden o no ser términos matemáticos, pero cualquier desarrollador de C++ debe ser MUY consciente de ellos y la diferencia se aplica a la * programación * en C++. –

+1

@Noah - wow, eres un programador muy inteligente, parece :) Pero, buscando diferencias entre los términos, puedes dejar de lado la programación ... De todos modos, creo que es importante entenderse unos a otros; Acepté tu sugerencia, la escribí y no hay necesidad de discutir al respecto. Saludos – Vladimir

+0

Eso está bien. Hubiera revertido mi -1, aunque si no estuvieras insinuando que no era importante para un programador saber la diferencia, algo que creo que está muy equivocado. –

2

Esto en NO 'indefinido'. Es "indeterminado". Los valores simplemente no se conocen.

+0

¿Existe una diferencia técnica entre indefinido e indeterminado? –

+0

@Martin: hay. "valor indeterminado" es un término empleado por el estándar C++. puedes buscarlo y más importante aún, los buenos programadores de C++ saben a qué te refieres cuando usas ese término."valor indefinido" no es un término: no es estándar, no es bien conocido. –

+0

+1 para downvote anónimo drive-by. no es bueno que SO atraiga a tantas personas de ese tipo, ¿qué se puede hacer?

Cuestiones relacionadas