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;
}