[C con Clase] Empezar con un vector nulo.

Steven Davidson steven en conclase.net
Jue Feb 8 19:51:29 CET 2007


Hola Dani,

El pasado 2007-02-08 14:57:32, dani escribió:

d> Hola a todos,
d> antes de nada doy las gracias a todos los que colaboran con esta lista pq es
d> increíble lo bien que funciona.
d> Bueno, mi pregunta es si hay una manera facil de empezar a trabajar con un
d> vector con todos los elementos 0 sin tener que poner cada vez
d> for (n=0;n<=nmax;n++) v[n]=0;
d> Creo que en la declaración se puede poner v[nmax]=0. Ahora bien, si lo
d> declaro de manera dinámica, creo que haciendo *v=0 no estoy haciendo esto
d> sino declarando un puntero nulo.

Primeramente, el bucle lo tienes mal escrito si has hecho previamente esta declaración:

int v[nmax];

entonces el bucle debería ser,

for( n=0; n<nmax; n++ )  v[n]=0;

Recuerda que los índices siempre empiezan a partir de 0 (cero).


Para solucionar tu problema, puedes inicializar el array. Por ejemplo,

int v[nmax] = { 0 };

El primer elemento es 0 (cero), y los posteriores son rellenados con 0 (cero), también.

Para un puntero, como bien has mencionado, se inicializaría a 0 (cero) y por tanto tenemos inicialmente un puntero nulo. En el caso de memoria dinámica, no tenemos otra opción que asignar uno por uno los elementos de tal array dinámico. Sugiero usar la función estándar 'memset()', declarada en <cstring>, si no quieres implementar el bucle 'for' tú mismo. Por ejemplo,

int *p = new int[1000000];

memset( p, 0, sizeof(int)*1000000 );


Espero haber aclarado la duda.

Steven


Más información sobre la lista de distribución Cconclase