martes, 2 de enero de 2018

C++ El operador Sizeof



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
 

https://codigogx.blogspot.cl/2017/12/c-los-punteros-y-las-cadenas-char.html


No hay comentarios:

Publicar un comentario

C++ El apuntador This

El apuntador This En C++, cada objeto tiene acceso a su propia dirección a través de un puntero o apuntador denominado This. Lo...