El operador sizeof
Este tipo de
datos sirve para calcular el tamaño en bytes de un tipo de dato, ya sea un
entero, un char, un arreglo etc. Su sintaxis es sizeof(dato). Veamos un
ejemplo:
// sizeof para ver tamaño del dato
#include<iostream>
using std::cout;
using std::endl;
int main(){
int numero = 5;
char letra = 'a';
cout << "Bytes de
variable cinco: " << sizeof(numero) << endl;
cout << "Bytes de
variable letra: " << sizeof(letra) << endl;
return 0;
}
Si
compilamos y ejecutamos este programa, este es el resultado:
En este caso nos dice
que la variable numero, que de tipo int, es de 4 bytes. En cambio la
variable letra, que es de tipo char, es de 1 bytes. Estos valores pueden
cambiar en otros computadores.
Así como podemos saber el valor de las variables,
también se puede consultar directamente el valor del tipo de dato. Ejemplo:
#include<iostream>
using
std::cout;
using
std::endl;
int
main(){
cout << "Valor de int: "
<< sizeof(int)
<< endl;
return 0;
}
En este ejemplo, sizeof(int) muestra que el tipo de
datos int es de 4 bytes. De la misma forma podemos consultar el valor de char,
float, double, etc.
Cuando tenemos un arreglo y consultamos su valor con
sizeof, este nos muestra su valor, el cual cambia dependiendo de la cantidad de
elementos que tiene el arreglo. Ejemplo.
#include<iostream>
using
std::cout;
using
std::endl;
int
main(){
int arreglo[] = {1,2,3};
cout
<< "Valor del arreglo: " << sizeof(arreglo) << endl;
return 0;
}
En este ejemplo se creó un arreglo de tipo int. Este
arreglo contiene 3 elementos {1,2,3}. Como se mostró anteriormente, int tiene
un valor de 4 bytes, por lo tanto, este arreglo al contener 3 elementos de 4
bytes, su valor es de 12 (4 x 3). Si este arreglo hubiese tenido 5 elementos,
su valor sería de 20 y si hubiese tenido 10 elementos, su valor sería de 40
bytes.
Con la información antes vista, se nos hace sencillo
averiguar la cantidad de elementos que posee un arreglo, simplemente dividiendo
el valor del arreglo, con el valor de su tipo de dato. Esto es, dividir
sizeof(arreglo) / sizeof(tipoDato). Ejemplo:
#include<iostream>
using
std::cout;
using
std::endl;
int
main(){
int arreglo[] = {1,2,3,4,5,6,7,8,9,10};
int cantElementos = sizeof(arreglo) / sizeof(int);
cout << "Elementos del
arreglo: " << cantElementos
<< endl;
return 0;
}
Al utilizar el operador sizeof en una función para
buscar el tamaño de un arreglo, se debe tener en cuenta que el resultado
obtenido es el tamaño del puntero y no el tamaño del arreglo, por ejemplo, en
el siguiente código se puede apreciar que al tratar de ver el tamaño de un
arreglo en una función, ésta retorna el valor del puntero en vez de retornar el
tamaño del arreglo:
#include<iostream>
using
std::cout;
using
std::endl;
int
longitud( int *);
int
main(){
int arreglo[] = {1,2,3,4,5};
cout << "Longitud arreglo: " << sizeof(arreglo)
<< endl;
cout
<< "Longitud arreglo funcion: " << longitud(arreglo)
<< endl;
return
0;
}
int
longitud(int *puntero){
return sizeof(puntero);
}
Gustavo J. Cerda Nilo
Enero 2018
No hay comentarios:
Publicar un comentario