Diferencia entre revisiones de «sizeof()»
De ArduWiki
(→Ejemplo 1) |
|||
(No se muestran 29 ediciones intermedias de 2 usuarios) | |||
Línea 1: | Línea 1: | ||
== Descripción == | == 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 == | == Sintexis == | ||
<pre> | <pre> | ||
sizeof(variable); | sizeof(variable); | ||
+ | sizeof(matriz); | ||
</pre> | </pre> | ||
== Parámetros == | == Parámetros == | ||
− | ; | + | ;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. [[size_t]] | ||
== Advertencias == | == 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: | ||
+ | <pre> | ||
+ | sizeof(matriz) / sizeof(matriz[0]); | ||
+ | sizeof(matriz) / sizeof(tipo); | ||
+ | </pre> | ||
+ | |||
+ | 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++"> | <syntaxhighlight lang="c++"> | ||
− | + | int valores[] = {1023, 45056, 77}; | |
− | void setup(){ | + | 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); | 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(){ | void loop(){ | ||
− | + | //Nada | |
− | Serial. | + | } |
+ | </syntaxhighlight> | ||
+ | |||
+ | == Ejemplo 3 == | ||
+ | Creamos una matriz de caracteres con cierto valor y luego mostramos carácter a carácter. | ||
+ | |||
+ | <syntaxhighlight lang="c++"> | ||
+ | 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.print(" = "); | ||
− | Serial.println(matriz[i]); | + | Serial.println(matriz[i]); //Codigo ASCII |
+ | delay(100); | ||
} | } | ||
− | |||
} | } | ||
− | <syntaxhighlight> | + | void loop(){ |
+ | //Nada | ||
+ | } | ||
+ | </syntaxhighlight> | ||
== Vea tambien == | == Vea tambien == | ||
* [[tone()]] | * [[tone()]] | ||
* [[noTone()]] | * [[noTone()]] | ||
− | * [[ | + | * [[pulseln()]] |
− | * [[ | + | * [[pulselnLong()]] |
* [[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
Contenido
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
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
}