You are on page 1of 5

AVRs

Arduino
Proyectos
Robtica
Recursos
PICs
Foro

cursomicros.com
Programacin de Microcontroladores
Lenguaje C para Microcontroladores

Contenido
Introduccin
Por qu C y no Basic?
Qu compilador usar?
nimo! No es tan difcil
Estructura de un programa
Los comentarios
Las sentencias
Los bloques
Las directivas
Las funciones
Variables y Tipos de Datos
Declaracin de variables
Especificadores de tipo de datos
Sentencias selectivas
La sentencia if
La sentencia if - else
La sentencia if - else - if escalonada
La sentencia switch

Sentencias iterativas
La sentencia while
La sentencia do - while
La sentencia for
Bloques simples
Los operadores
Operadores aritmticos
Operadores de bits
Operadores relacionales
Operadores lgicos
Composicin de operadores
Precedencia de operadores
Las funciones a Fondo
Funciones sin parmetros
Parmetros por valor
Parmetros por referencia
Prototipos de funciones
Variables locales y globales
Variables static
Variables volatile
Arrays y Punteros
Los arrays o matrices
Declaracin de arrays
Inicializacin de arrays
Cadenas de texto
Los punteros
Declaracin de punteros
Apuntando a variables
Asignaciones con punteros
Punteros y arrays
Paso de punteros y arrays a funciones
Arrays constantes

Arrays y Punteros

Probablemente ste sea el tema que a todos nos ha dado ms de un dolor de cabeza y que ms hemos
reledo para captarlo a cabalidad. Hablo ms bien de los punteros. Si ellos el C no sera nada, perdera la
potencia por la que las mejores empresas lo eligen para crear sus softwares de computadoras.
Pero bueno, regresando a lo nuestro, estos temas se pueden complicar muchsimo ms de lo que veremos
aqu. Solo veremos los arrays unidimensionales y los punteros (que en principio pueden apuntar a todo tipo
de cosas) los abocaremos a los datos bsicos, incluyendo los mismos arrays. Aun as, te sugiero que tengas
un par de aspirinas al lado.

Los arrays o matrices


Un array es una mega variable compuesto de un conjunto de variables simples del mismo tipo y ubicadas en
posiciones contiguas de la memoria. Con los arrays podemos hacer todos lo que hacamos con las tablas (de
bsqueda) del ensamblador y muchsimo ms.
Un array completo tiene un nombre y para acceder a cada uno de sus elementos se utilizan ndices entre
corchetes ([ ]). Los ndices pueden estar indicados por variables o constantes. En el siguiente esquema se ve
que el primer elemento de un array tiene ndice 0 y el ltimo, N-1, siendo N la cantidad de elementos del
array.

Estructura de un array unidimensional de N elementos.

Declaracin de arrays
Para declarar un array unidimensional se utiliza la siguiente sintaxis:
data_type identifier[ NumElementos ];

Donde data_type es un tipo de dato cualquiera, identifier es el nombre del array y NumElementos es la
cantidad de elementos que tendr (debe ser un valor constante).
De este modo, el ndice del primer elemento es 0 y el del ltimo es NumElements - 1.
Por ejemplo, las siguientes lneas declaran tres arrays.
char letters10];
// letters es un array de 10 elementos de tipo char
long HexTable[16]; // HexTable es un array de 16 elementos de tipo long
int address[100]; // address es un array de 100 elementos de tipo int

Para el array letters el primer elemento es letters[0] y el ltimo, letters[9]. As, tenemos 10 elementos en
total. Si quisiramos asignar a cada uno de los elementos de letters los caracteres desde la a hasta la j, lo
podramos hacer individualmente as:
letters[0] = 'a';
letters[1] = 'b';
letters[2] = 'c';
letters[3] = 'd';

// Aqu el ndice es 0
// Aqu el ndice es 1
// ...
//

letters[4] = 'e';
letters[5] = 'f';
letters[6] = 'g';
letters[7] = 'h';
letters[8] = 'i';
letters[9] = 'j';

// Aqu el ndice es 9

Pero as no tiene gracia utilizar arrays, verdad? En este caso lo mejor es utilizar un bucle, as: (Nota: los
caracteres son, al fin y al cabo, nmeros en cdigos ascii y se les puede comparar.)
char c;
for ( c = 'a'; c <= 'j'; c++ )
letters[i] = c;

Inicializacin de arrays
Los elementos de un array se pueden inicializar junto con su declaracin. Para ello se le asigna una lista
ordenada de valores encerrados por llaves y separados por comas. Por supuesto, los valores deben ser
compatibles con el tipo de dato del array. Este tipo de inicializacin solo est permitido en la declaracin del
array.
Ejemplos:
unsigned char mask[3] = { 0xF0, 0x0F, 0x3C }; // Ok
int a[5] = { 20, 56, 87, -58, 5000 };
// Ok
char vocals[5] = { 'a', 'e', 'i', 'o', 'u' }; // Ok
int c[4] = { 5, 6, 0, -5, 0, 4 }; // Error, demasiados inicializadores

Tambin es posible inicializar un array sin especificar en su declaracin el tamao que tendr, dejando los
corchetes vacos. El tamao ser precalculado y puesto por el compilador. sta es una forma bastante usada
en los arrays de texto, donde puede resultar muy incmodo estar contando las letras de una cadena. Por
ejemplo:
int a[] = { 70, 1, 51 };
// Un array de 3 elementos
char vocals[] = { 'a', 'e', 'i', 'o', 'u' };
// Un array de 5 elementos
char msg[] = "Este es un array de caracteres"; // Un array of 31 elementos

Por qu el ltimo array tiene 31 elementos si solo se ven 30 letras? Lo sabremos luego.

Cadenas de texto terminadas en nulo


Son arrays de tipo de dato char. Hay dos caractersticas que distinguen a estas cadenas de los dems arrays.
Primero: su inicializacin se hace empleando comillas dobles y segundo, el ltimo trmino del array es un
carcter NULL (simplemente un 0x00). De ah su nombre.
Ejemplos:
char Greet[10] = "Hello";
char msg[] = "Hello";

// Un array de 10 elementos
// Un array de 6 elementos

El array Greet tiene espacio para 10 elementos, de los cuales solo los 5 primeros han sido llenados con las
letras de Hello, el resto se rellena con ceros.
El array msg tiene 6 elementos porque adems de las 5 letras de Hello se le ha aadido un Null (0x00) al

final (claro que no se nota). Es decir, la inicializacin de msg es equivalente a:


char msg[] = { 'H', 'e', 'l', 'l', 'o', 0x00}; // Un array de 6 elementos

Visto grficamente, msg tendra la siguiente representacin:

Estructura de una cadena de texto.

Anterior
Arriba
Siguiente
Trminos de uso & Deslinde
Copyright 2009-2013 by cursomicros.com

You might also like