Los operadores ++ y -- con tipo de dato puntero tienen un funcionamiento distinto que cuando incrementamos o decrementamos una variable entera.
Cuando utilizamos el operador ++ con un puntero incrementa la variable según el tamaño del tipo de dato que apunta. Si es un puntero a entero incrementa la dirección en 4 bytes (en un sistema operativo de 32bits), si es un puntero a tipo char incrementa la dirección en 1 byte etc.
Un ejemplo de como utilizar la sintaxis de punteros:
#include<stdio.h> #include<conio.h> int main() { int vec[5]={10,20,30,40,50}; int *pe; pe=vec; printf("%i\n",*pe); // 10 pe++; printf("%i\n",*pe); // 20 pe++; printf("%i\n",*pe); // 30 pe--; printf("%i\n",*pe); // 20 getch(); return 0; }
Como vec y pe son punteros a enteros luego podemos asignar vec a la variable pe:
pe=vec;
En este momento pe tiene la dirección de la primer componente del vector, luego si imprimimos lo que apunta pe tenemos el valor 10:
printf("%i\n",*pe); // 10
El operador ++ incrementa el contenido de la variable pe tantos bytes como sea el tamaño de las variables int en nuestro sistema operativo, por eso luego si accedemos a lo apuntado por pe tenemos el valor 20:
pe++; printf("%i\n",*pe); // 20
Un punto importante es que el vector vec si bien es un puntero no podemos utilizar el operador ++ o --, siempre apuntará a la primera componente del vector.
Desarrollar un programa para administrar un vector de 5 enteros.
En la función de carga e impresión utilizar la sintaxis de punteros para acceder a sus elementos (no utilizar la sintaxis de subíndice)
#include<stdio.h> #include<conio.h> #define TAMANO 5 void cargar(int *pe) { int f; for(f=0;f<TAMANO;f++) { printf("Ingrese elemento:"); scanf("%i",&*pe); pe++; } } void imprimir(int *pe) { int f; for(f=0;f<TAMANO;f++) { printf("%i ",*pe); pe++; } } int main() { int vec[TAMANO]; cargar(vec); imprimir(vec); getch(); return 0; }
En la función de carga le pasamos en cada vuelta del for la dirección que apunta la variable pe:
scanf("%i",&*pe);
Y seguidamente incrementamos el puntero pe con el operador ++, con esto logramos que apunte a la siguiente componente del vector.
De forma similar en la impresión utilizamos la sintaxis de puntero para acceder a cada componente:
void imprimir(int *pe) { int f; for(f=0;f<TAMANO;f++) { printf("%i ",*pe); pe++; } }
int largo(char *cadena)Debe retornar el largo de la cadena utilizando la sintaxis de punteros para acceder a sus componentes. Recordar que el caracter '\0' indica el fin de la parte de información de la cadena.
programa156.c #include<stdio.h> #include<conio.h> int largo(char *cad) { int cant=0; while(*cad!='\0') { cant++; cad++; } return cant; } int main() { char nombre[10]="Maria"; printf("El nombre: %s tiene %i caracteres", nombre, largo(nombre)); getch(); return 0; }