Siempre pensé que si declaraba estas tres variables, todas tendrían el valor 0
int column, row, index = 0;
Pero encuentro que solo el índice es igual a cero y los otros son basura como 844553 y 2423445.
¿Cómo puedo inicializar todas estas variables a cero sin declarar cada variable en una nueva línea?
int* a, b, c;
no hace lo que parece).=0
para cada una en sus definiciones. Y, si realmente quieres muchas variables, prueba una matriz:int a[10]={0}
inicializará cada unaa[i]
a 0 por ti.Respuestas:
fuente
Cuando declaras:
Solo el índice se establece en cero.
Sin embargo, puede hacer lo siguiente:
Pero personalmente prefiero lo siguiente que se ha señalado.
Es una forma más legible en mi opinión.
o
fuente
bool previousInputValue, presentInputValue;
) o si simplemente son del mismo tipo ahora pero realmente no necesitan serlo (uint8_t height, width;
podría convertirseuint8_t height; uint16_t width;
en el futuro y debería haber sidouint8_t height; uint8_t width;
para empezar).uint8_t height; uint16_t width;
lugar deuint8_t height, width;
guardar 10 caracteres en el futuro. :-) por supuesto, puedes hacerlo como quieras. Solo asegúrate de que sea fácil de leer. Entonces la última forma es la más explícita.int presentValue = 0; typeof(presentValue) previousValue = presentValue;
, pero creo quetypeof()
es una extensión GCC no estándar.Como dijo @Josh, la respuesta correcta es:
Tendrá que estar atento a lo mismo con los punteros. Esta:
Es equivalente a:
fuente
unsigned long x, y;
declarax
comounsigned long
peroy
solounsigned
, akaunsigned int
! Eso es exactamente lo mismo! </rant>int *a
medio que*a
representa unint
valor.void* a
compilará yvoid *a, b, c
no lo hará? Esta racionalización funciona para mí.Si declara una variable / objeto por línea, no solo resuelve este problema, sino que aclara el código y evita errores tontos al declarar punteros.
Sin embargo, para responder directamente a su pregunta, debe inicializar cada variable a 0 explícitamente.
int a = 0, b = 0, c = 0;
.fuente
Tenga en cuenta que este formulario también funcionará con tipos personalizados, especialmente cuando sus constructores toman más de un argumento.
fuente
auto
...): int columna { 0 } , fila { 0 } , índice { 0 } ;A partir de 2k18, puede usar enlaces estructurados :
Demo
fuente
Posibles enfoques:
memset
o{0}
la matriz.struct
y,memset
o tenga un constructor que los inicialice a cero.fuente
No recomendaría esto, pero si realmente te gusta ser una línea y solo escribir 0 una vez, también puedes hacer esto:
fuente
Como otros han mencionado, desde C ++ 17 en adelante puedes usar enlaces estructurados para múltiples asignaciones de variables.
Combinando esto con
std::array
y deducción de argumento de plantilla podemos escribir una función que asigna un valor a un número arbitrario de variables sin repetir el tipo o valor .Demo
fuente
Cuando declara una variable sin inicializarla, se selecciona un número aleatorio de la memoria y la variable se inicializa a ese valor.
fuente