Professional Documents
Culture Documents
int tabla[3][4];
float resistencias[4][5];
scanf(%d, &tabla[2][3]);
printf(%d,tabla[1][1]);
scanf(%f, &resistencias[2][4]);
Se puede acceder a los elementos de un arreglo bidimensionales mediante bucles
anidados. Su sintaxis es:
int x,y, datos[5][5];
for(x = 0; x < 5; x++)
{
for(y=0; y < 5; y++)
{
scanf(%d, &datos[x][y]);
}
}
}
ARREGLOS DIMENSIONALES
Los arreglos (arrays) permiten almacenar
unidimensionales sirven para manejar vectores.
vectores
matrices.
Los
arreglos
{
// cuerpo de la funcin
...
}
En el esquema anterior, el llamado a la funcin se hizo desde la funcin main. Esto no es
ninguna
obligacin; el llamado se puede hacer desde cualquier funcin donde se define un arreglo
o donde a su
vez llega un arreglo como parmetro.
Tambin se puede hacer el paso de un arreglo como parmetro de la siguiente manera.
Es la forma
ms usual. Tiene involucrada la nocin de apuntador que se ver en el siguiente captulo.
... funcion (..., double *x, ...); // prototipo
//-----------------------------------------------int main(void)
{
double v[30];
...
... funcin(..., v, ...); // llamado a la funcin
...
}
//-----------------------------------------------... funcin(..., double *x, ...)// definicin de la funcin
{
// cuerpo de la funcin
...
}
PUNTEROS
Un puntero es una variable que contiene la direccin de memoria de un dato o de otra
variable que contiene al dato en un arreglo. Esto quiere decir, que el puntero apunta al
espacio fsico donde est el dato o la variable. Un puntero puede apuntar a un objeto de
cualquier tipo, como, por ejemplo, a una estructura o una funcin. Los punteros se pueden
utilizar para referencia y manipular estructuras de datos, para referenciar bloques de
memoria asignados dinmicamente y para proveer el paso de argumentos por referencias
en las llamadas a funciones.
Muchas de las funciones estndares de C, trabajan con punteros, como es el caso
del scanf o strcpy. Estas funciones reciben o devuelve un valor que es un puntero. Por
ejemplo: A scanf se le pasa la direccin de memoria del dato a leer...
char a;
scanf ("%c",&a);
En este caso se le pasa la direccin de memoria de la variable a, la cual tiene reservado
un espacio en la memoria por el compilador. Podramos hacer lo mismo con este cdigo:
char *a = (char) malloc (sizeof (char));
scanf ("%c", a);
En este cdigo, al scanf le pasamos el puntero en s. El puntero es una variable, como
bien se ha dicho anteriormente, que contiene una direccin de memoria, por tanto, no es
necesario el uso de & para pasarle la direccin de memoria a scanf. Anteriormente hemos
tenido que reservar un espacio de memoria con malloc(), que se ver su uso ms
adelante.
Este cdigo sera errneo y dara una violacion de segmento:
char *a;
scanf ("%c", a);
En este caso, no hemos reservado memoria, por lo tanto, la funcin escribir en una
direccin de memoria que no le pertenece, y por ello se producir la susodicha violacin
de segmento.
Ya se dijo que un puntero es una variable que guarda la direccin de memoria de otra
variable, haciendo lgica a esto, decimos que un puntero se declara igual que cualquier
otra variable, pero anteponiendo un * (asterisco) antes del nombre de la variable.
Su sintaxis seria:
tipo *NombrePuntero;
Donde tipo es el tipo de dato al que referenciar este puntero, es decir, que, si se
necesita guardar la direccin de memoria de un dato int, se necesita un puntero de
tipo int.
#include <stdio.h>
int main()
{
int a=0; //Declaracin de variable entera de tipo entero
int *puntero; //Declaracin de variable puntero de tipo entero
puntero = &a; //Asignacin de la direccin memoria de a
printf("El valor de a es: %d. \nEl valor de *puntero es: %d. \n",a,*puntero);
printf("La direccion de memoria de *puntero es: %p",puntero);
return 0;
}
Igual que cuando usamos un &, en la lectura de datos con scanf, igual de esta forma
lo usamos aqu, tal vez te acordaras que decamos que las cadenas de caracteres
(%s) no usaban este operador, esto es porque en una cadena de caracteres es un
arreglo de caracteres, por lo que el primer carcter es la direccin de inicio de la
cadena.
El operador *, nos permite acceder al valor de la direccin del puntero, en este caso
nos permite acceder al valor que contiene a la variable a. De esta forma "a" y
"*puntero" muestran el mismo dato, pero esto no quiere decir que sea lo mismo, uno
es un entero el otro un puntero.
La impresin con %p, es para poder imprimir la direccin de memoria en valor
hexadecimal (0x...), tambin podemos imprimir: ...%p",&a) y funciona de la misma
forma, y es lgico que tanto a, como puntero tienen la misma direccin de memoria.