Espacio de tecnologia, software libre y sus derivados. Una horda de monos entrenados escriben de vez en cuando por aqui algunas noticias, opiniones e incluso alguna que otra cosa fuera del tema. Maqueros, favor de abstenerse que no somos lo suficientemente guapos.

Piano daemon

(Aritmetica de Puntero) Convertir una cadena de minusculas a MAYUSCULAS.

Elabore una funcion que convierte una palabra de minusculas a MAYUSCULAS utilizando aritmetica de punteros.

Notese que los punteros, tambien pueden actuar como arreglos…

#include "stdio.h"

int main(){

	char *palabra_en_minuscula="plauchu";

	while ( *palabra_en_minuscula != '\0'){
		printf("%c",(*palabra_en_minuscula++ - 32));
	}

	printf("n");
	return 0;
}

Aqui como corro el ejemplo…. bien podrias convertirlo en una funcion.

[j4nusx@localhost ~]$ gcc aritmetica_punteros.c -Wall -o aritmetica_punteros
[j4nusx@localhost ~]$ ./aritmetica_punteros
PLAUCHU

Expliquemos un poco mas lo que es la aritmetica de punteros:

int vector [100];	/* un vector de enteros */
int *ptr;			/* un puntero a enteros */
...
ptr = &vector[0];	/* ptr apunta al principio del vector */
*ptr = 33;		/* igual que vector[0] = 33 */
*(ptr+1) = 44;		/* igual que vector[1] = 44 */
*(ptr+2) = 90;		/* igual que vector[2] = 90 */

La expresión que se suma al puntero ha de ser entera y no tiene por qué ser constante. Obsérvese que ptr es lo mismo que ptr+0.

La expresión sumada NO es el número de bytes que se suman a la dirección, es el número de elementos del tipo al que apunta el puntero:

/* Supongamos que un "char" ocupa 1 byte */
/* y que un "double" ocupa 8 bytes */
char* ptrchar;
double* ptrdouble;
...
*(ptrchar+3) = 33; /* la dirección es ptrchar + 3 bytes */
*(ptrdouble+3) = 33.0; /* la dirección es ptrdouble + 24 bytes,   ya que cada double ocupa 8 bytes */

El compilador “sabe” cómo calcular la dirección según el tipo.

Aritmética de punteros (más)

A un puntero se le puede aplicar cualquier clase de operación de suma o resta (incluyendo los incrementos y decrementos).

/* Rellenar de unos los elementos del 10 al 20 */

int* ptr;			/* el puntero */
int vector [100];	/* el vector */
int i;			/* variable contadora */

ptr = &vector[0];	/* ptr apunta al origen del vector */
ptr+=10;			/* ptr apunta a vector[10] */

for ( i=0; i<=10; i++ )
{
  *ptr = 1;	/*	asigna 1 a la posición de memoria apuntada 				por "ptr" */
  ptr++;		/* 	ptr pasa al siguiente elemento */
}

Gulsin 2.0rg - El hermano feo de tux » Reglas magicas para el manejo de apuntadores en C

August 13, 2009 @ 5:51 pm

[…] Con estas reglas basica ahora podras comprender la fabulosa Aritmetica de punteros […]

CARLTON

September 8, 2010 @ 10:57 pm

< blockquote >< a href=”http://cheaptabletsonline.com/”>CheapTabletsOnline.com. Canadian Health&Care.Special Internet Prices.Best quality drugs.No prescription online pharmacy. Online Pharmacy. Buy drugs online< /a >…

Buy:Mega Hoodia.Petcam (Metacam) Oral Suspension.Prednisolone.Actos.Accutane.Synthroid.Human Growth Hormone.Lumigan.Retin-A.Zovirax.Nexium.100% Pure Okinawan Coral Calcium.Prevacid.Arimidex.Zyban.Valtrex….

RSS feed para comentarios en esta entrada · TrackBack URI

Comenta