Escolar Documentos
Profissional Documentos
Cultura Documentos
1111 45.23
De manera general una declaración de un puntero consiste en un tipo base(int, char, flotat), un
asterisco * y el nombre de la variable. La forma general es:
tipo *nombre_de _variable;
Asignación de punteros
Como en el caso de cualquier otra variable, un puntero puede utilizarse a la derecha de una
declaración de asignación para asignar su valor a otro puntero. Por ejemplo:
int x;
int *p1,*p2;
p1=&x;
p2=p1;
Tanto p1 como p2 apuntan a x.
Punteros y arrays
Existe una estrecha relación entre los punteros y los arreglos. Recuerde que el nombre de un
arreglo se considera puntero a la primera posición.
char linea[80], *prt2;
prt2 = linea;
Aquí, prt2 ha sido asignado a la dirección del primer elemento del vector linea. Para acceder al
quinto elemento de linea se escribe linea[4] o *(prt2 + 4). Los punteros pueden almacenarse en arreglos
como cualquier otro tipo de datos. Por ejemplo, para un arreglo de 10 punteros a tipo entero, la
declaración es: int *x[10]; Para asignar la dirección de una variable entera llamada var al tercer
elemento de x se escribe: x[2] = &var; El valor de la variable var corresponde a *x[2];(valor que es
apuntado por x[2]).
Indirección múltiple
Se puede hacer que un puntero apunte a otro puntero que apunte a un valor de destino. Esta
situación se denomina indirección múltiple o punteros a punteros. Una variable que es puntero a puntero
tiene que declararse como tal. Esto se hace colocando un asterisco (*) adicional en frente del nombre de
la variable. Por ejemplo, la siguiente declaración indica al compilador que ptr es un puntero a puntero de
tipo float:
float **ptr;
El centro del sistema de asignación dinámica está compuesto por las funciones (existentes en la
biblioteca stdlib.h)
malloc(), que asigna memoria y devuelve un puntero a un char.
free() que la devuelve o la libera.
Tras una llamada fructífera, malloc() devuelve un puntero a un caracter, de manera que en el
ejemplo, la declaración de ptr es char *ptr. Si no hay suficiente memoria libre para satisfacer la petición
de malloc(), se devuelve el apuntador nulo. En el siguiente código se asigna en tiempo de ejecución 10
posiciones enteras (un vector de 10 posiciones)
int *ptr2;
ptr2 = (int *) malloc(50 * sizeof(int));
Nótese que se ha hecho una conversión del tipo char que devuelve malloc, a tipo int de ptr2. Después de
la asignación, ptr2 apunta a la primera posición entera de las 50 solicitadas.
Listas dinámicas
Si se desea crear una lista dinámica cuyos nodos contengan diferentes tipos de datos, entonces,
es necesario definir una estructura o registro que contenga un apuntador para ir enlazando los nodos, tal
como se muestra en el diagrama:
Inicio
Null
struct elementonodo {
int inf;
struct elementonodo *sig;
};
typedef struct elementonodo nodo; /* nodo es un tipo de estructura */
typedef struct{
int num;
char nombre[10];
} estructura;
scanf ("%s",pestr->nombre);
printf("%s\n",pestr->nombre);
printf("%d\n",nuevo->num);
scanf ("%s",nuevo->nombre);
printf("%s\n",nuevo->nombre);
nuevo ->liga = NULL;