Diferencia entre revisiones de «sizeof()»

De ArduWiki
Saltar a: navegación, buscar
m (Advertencias)
(Ejemplo 1)
 
(No se muestran 18 ediciones intermedias de 2 usuarios)
Línea 1: Línea 1:
 
== Descripción ==
 
== Descripción ==
Evalúa el tamaño en bytes de una variable o matriz. Acepta cualquier tipo de datos: [[char]], [[byte]], [[int]], [[long]], [[float]], etc.
+
Evalúa el tamaño de memoria reservado para una variable o [[matriz]] en bytes. Acepta cualquier tipo de datos: [[char]], [[byte]], [[int]], [[word]], [[long]], [[double]], [[float]], etc.
  
 
== Sintexis ==
 
== Sintexis ==
 
<pre>
 
<pre>
 
sizeof(variable);
 
sizeof(variable);
 +
sizeof(matriz);
 
</pre>
 
</pre>
  
 
== Parámetros ==
 
== Parámetros ==
;variable: nombre de variable o matriz a evaluar, que puede ser tipo: [[char]], [[byte]], [[int]], [[long]], [[float]].
+
;matriz:nombre de la matriz a evaluar, que puede ser tipo: [[char]], [[byte]], [[int]], [[word]], [[long]], [[float]].
  
 
== Retorna ==
 
== Retorna ==
Número de bytes ocupados por variable o matriz.
+
Número de bytes ocupados por variable o matriz. [[size_t]]
  
 
== Advertencias ==
 
== Advertencias ==
'''sizeof()''' al contar en bytes, no necesariamente lo hace en cantidad de elementos; esto depende del tipo de dato. Lo más correcto sería:
+
* '''sizeof()''' al contar en bytes, solo coincide con la cantidad de elementos si son tipo: [[bool]] o [[char]] o [[byte]].
 +
* Si quieres hallar el numero de elementos de una matriz: [[int]], [[long]], [[double]] o [[float]]. Lo más correcto sería:
 
<pre>
 
<pre>
sizeof(matriz) / sizeof(tipo)
+
sizeof(matriz) / sizeof(matriz[0]);
 +
sizeof(matriz) / sizeof(tipo);
 
</pre>
 
</pre>
 +
 
Para así obtener el tamaño en cantidad de elementos y no en bytes.
 
Para así obtener el tamaño en cantidad de elementos y no en bytes.
  
== Ejemplo ==
+
== Ejemplo 1 ==
 +
Para obtener la cantidad de elementos solo hay que dividir entre el numero de bytes de cada elemento
 +
<syntaxhighlight lang="c++">
 +
int valores[] = {1023, 45056, 77};
 +
byte indice = sizeof(valores);                  //6 bytes
 +
byte indice = sizeof(valores) / sizeof(int);    //3 elementos
 +
bool A[][4] = {{0,1,0,0}, {0,0,1,0}, {0,1,1,0}};
 +
byte indice = sizeof(A);                        //12 bytes
 +
byte indice = sizeof(A) / sizeof(bool);          //12 elementos
 +
byte indice = sizeof(A) / (4 * sizeof(bool));    //3 fila + 4 columnas
 +
</syntaxhighlight>
 +
 
 +
== Ejemplo 2 ==
 +
Trabajar con una matriz bidireccional.
 +
 
 +
<syntaxhighlight lang="c++">
 +
void setup() {
 +
  Serial.begin(9600);
 +
  int A[][4] = {{1024,5000,0,24344}, {11111,3000,12345,670}, {0,10000,1,62000}};
 +
  byte A1 = sizeof(A);
 +
  byte A2 = sizeof(A) / sizeof(int);
 +
  byte A3 = sizeof(A) / (4 * sizeof(int));
 +
  Serial.println(A1);  //24 bytes
 +
  Serial.println(A2);  //12 elementos
 +
  Serial.println(A3);  //3 filas + 4 columnas
 +
}
 +
void loop(){
 +
  //Nada
 +
}
 +
</syntaxhighlight>
 +
 
 +
== Ejemplo 3 ==
 
Creamos una matriz de caracteres con cierto valor y luego mostramos carácter a carácter.
 
Creamos una matriz de caracteres con cierto valor y luego mostramos carácter a carácter.
 +
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
const char matriz[]="Esto es una matriz";
+
const byte matriz[]="Esto es una matriz";
 
void setup(){
 
void setup(){
 
   Serial.begin(115200);
 
   Serial.begin(115200);
}
 
void loop(){
 
 
   for (byte i=0; i<sizeof(matriz)-1; i++{
 
   for (byte i=0; i<sizeof(matriz)-1; i++{
       Serial.print(i);
+
       Serial.write(matriz[i]);     //Caracter
 
       Serial.print(" = ");
 
       Serial.print(" = ");
       Serial.println(matriz[i]);
+
       Serial.println(matriz[i]);   //Codigo ASCII
       delay(500);
+
       delay(100);
 
   }
 
   }
  delay(5000);
+
}
 +
void loop(){
 +
  //Nada
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
Línea 45: Línea 81:
 
* [[shiftIn()]]
 
* [[shiftIn()]]
 
* [[shiftOut()]]
 
* [[shiftOut()]]
 +
* [[matriz]]
  
 
== Referencias ==
 
== Referencias ==
 +
* [https://www.arduino.cc/reference/en/language/variables/utilities/sizeof/ sizeof()] - Arduino
 +
* [http://manueldelgadocrespo.blogspot.com/p/sizeof.html sizeof()] - Manuel Delgado
  
 
[[Category:Funciones]]
 
[[Category:Funciones]]

Revisión actual del 15:10 16 mar 2020

Descripción

Evalúa el tamaño de memoria reservado para una variable o matriz en bytes. Acepta cualquier tipo de datos: char, byte, int, word, long, double, float, etc.

Sintexis

sizeof(variable);
sizeof(matriz);

Parámetros

matriz
nombre de la matriz a evaluar, que puede ser tipo: char, byte, int, word, long, float.

Retorna

Número de bytes ocupados por variable o matriz. size_t

Advertencias

  • sizeof() al contar en bytes, solo coincide con la cantidad de elementos si son tipo: bool o char o byte.
  • Si quieres hallar el numero de elementos de una matriz: int, long, double o float. Lo más correcto sería:
sizeof(matriz) / sizeof(matriz[0]);
sizeof(matriz) / sizeof(tipo);

Para así obtener el tamaño en cantidad de elementos y no en bytes.

Ejemplo 1

Para obtener la cantidad de elementos solo hay que dividir entre el numero de bytes de cada elemento

int valores[] = {1023, 45056, 77};
byte indice = sizeof(valores);                   //6 bytes
byte indice = sizeof(valores) / sizeof(int);     //3 elementos
bool A[][4] = {{0,1,0,0}, {0,0,1,0}, {0,1,1,0}}; 
byte indice = sizeof(A);                         //12 bytes
byte indice = sizeof(A) / sizeof(bool);          //12 elementos
byte indice = sizeof(A) / (4 * sizeof(bool));    //3 fila + 4 columnas

Ejemplo 2

Trabajar con una matriz bidireccional.

void setup() {
   Serial.begin(9600);
   int A[][4] = {{1024,5000,0,24344}, {11111,3000,12345,670}, {0,10000,1,62000}};
   byte A1 = sizeof(A);
   byte A2 = sizeof(A) / sizeof(int);
   byte A3 = sizeof(A) / (4 * sizeof(int));
   Serial.println(A1);   //24 bytes
   Serial.println(A2);   //12 elementos
   Serial.println(A3);   //3 filas + 4 columnas
}
void loop(){
   //Nada
}

Ejemplo 3

Creamos una matriz de caracteres con cierto valor y luego mostramos carácter a carácter.

const byte matriz[]="Esto es una matriz";
void setup(){
   Serial.begin(115200);
   for (byte i=0; i<sizeof(matriz)-1; i++{
      Serial.write(matriz[i]);     //Caracter
      Serial.print(" = ");
      Serial.println(matriz[i]);   //Codigo ASCII
      delay(100);
   }
}
void loop(){
   //Nada
}

Vea tambien

Referencias