Como saber el tamaño de un array de tipo int

Iniciado por Blaster, 8 Noviembre 2012, 16:40 PM

0 Miembros y 1 Visitante están viendo este tema.

Blaster

Estoy trabajando con un progrma que hace uso de un array de tipos entero, y necesito determinar el tamaño en base al cotenido de esta; probe con strlen pero esta solo devuelve la longitud de uno de tipo char.

char cadena[15]= "Hola" ;

Aka definimos una arary de tamaño 15, pero la hemos inicializado y tiene una longitud de solo  4,
pasando esto a strlen efectivamente devuelve 4; existe una funcion igual a esta para
aplicarla a un entero.

Desde ya mucha gracias

Pablo Videla

A ver, vamos por parte, según yo, lo que estas haciendo, es calcular el largo de string, y no del arreglo del char puesto que lo has creado con 15 posiciones, por lo tanto el largo será de 15.

Si tu haces esto por ejemplo:

int array[3];
array[0]=1;

y haces el metodo para tomar el tamaño, va a estar ocupado solo una posicion, pero el largo del array seguira siendo 3.

Si estoy equivocado, me avisan.

PD: No se C / C++
pero en JAVA es asi.

do-while

¡Buenas!

Cuando declaras un vector, dentro de su ambito de uso puedes saber el tamaño con el operador sizeof, pero si utilizas un vector como parametro de una funcion no podras saber cual es su tamaño original, sizeof siempre te dara la cantidad de bytes que ocupa un puntero del tipo del vector. Si pasas un vector como parametro de una funcion y la funcion depende del tamaño del vector, tendras que añadir a la lista de parametros el tamaño.

#include <stdio.h>

void funcion1(int x[])
{
   printf("Como parametro de funcion1: %d bytes.\n", sizeof(x));
}

void funcion2(int *x[])
{
   printf("Como parametro de funcion2: %d bytes.\n", sizeof(*x));
}

int main(int argc, char *argv[])
{
   int x[10];


   printf("Dentro del ambito en el que se ha declarado: %d bytes.\n", sizeof(x));

   funcion1(x);
   funcion2(&x);

   return 0;
}


A parte funcion2 me insulta por pasarle la direccion de memoria de x...

¡Saludos!

PD: Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

rir3760

Cita de: do-while en  8 Noviembre 2012, 16:47 PMA parte funcion2 me insulta por pasarle la direccion de memoria de x...
Eso sucede porque en tu programa "&x" es de tipo "int (*)[10]" mientras que la función "funcion2" espera, como segundo argumento, un valor de tipo "char **":
void funcion2(int *x[]) ...

==>

void funcion2(int **x) ...


Al no coincidir los tipos tu compilador genera el mensaje de error.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Blaster

#4
Utilizando la  expresion sizeof c / sizeof *c dividiendo el tamaño completo del array
entre el tamaño del primer elemento, se obtiene la longitud del array de esta forma:
Código (cpp) [Seleccionar]
int c[] = { 1, 2, 3, 4 };

printf("Cantidad de elemetos: %d", sizeof c / sizeof *c );


Salida: 4

Pero sin especificar el tamaño del array ya que si lo hago me tira solo el tamaño del mismo y no
los elementos que la componen
De esta forma:
Código (cpp) [Seleccionar]
int c[10] = { 1, 2, 3, 4 };
Me da el valor que les comentaba que es 10, cuando el que deseo es 4.

Muchas gracias a los que contestaron  ;)