Documente Academic
Documente Profesional
Documente Cultură
Pentero entero
NOTA: a los apuntadores solo se
les puede asignar: 0, NULL o una -234
dirección
Ejemplo
#include <stdio.h>
main(){
int entero;
int *pentero;
entero = 548;
pentero = &entero;
printf("La dirección de entero es %d\n",&entero);
printf("el valor de pentero es %d\n",pentero);
printf("el valor de entero es %d\n",entero);
printf("el valor de *pentero es %d\n",*pentero);
*pentero = -234;
printf("el valor de entero es %d\n",entero);
printf("el valor de *pentero es %d\n",*pentero);
return 0;
}
Sí se define short *pt; un short se representa por 2 bytes (sizeof(short) = 2):
pt = &a; Se inicializa el puntero "pt" con una direcció válida, la direccíón de la variable "a". Se dice a partir de aquí que "pt" apunta a
"a" o que la variable referenciada por "pt" coincide con "a". El valor de la variable refernciada por "pt" (*pt) es 1 (el mismo valor que
tiene la variable "a").
*pt = 73; Se modifica el valor de la variable referenciada, ahora *pt tiene el valor de 73. La variable "a" también cambia a 73.
pt = NULL; El puntero "pt" apunta ahora a NULL, ya no existe a partir de aquí la variable referenciada.
*pt = 25; ERROR: No existe la variable referenciada en este punto.
pt = c; "c" es un arreglo, por lo tanto el identificador "c" está relacionado con la dirección del primer elemento del arreglo. Esta
instrucción hace que "pt" apunte a esa misma dirección de memoria.
pt[2] = 51; Modifica el elemento "c[2]" en 51. Un puntero puede manejarse como un arreglo.
#include <stdio.h>
main(){
int a[10]={3,4,1,8,2,3,4,5,7,0};
int *b;
b = a; //b apunta al inicio del arreglo a
printf("la dirección de b %d, contiene %d\n",b,*b);
b = b + 1; //b apunta a a[1]
printf("la dirección de b %d, contiene %d\n",b,*b);
b = b + 3; //b apunta a a[4]
printf("la dirección de b %d, contiene %d\n",b,*b);
b = b – 2; //b apunta a a[2]
printf("la dirección de b %d, contiene %d\n",b,*b);
return 0;
}
#include <stdio.h>
main(){
double a[10]={3,4,1,8,2,3,4,5,7,0},*b;
b = a;//b apunta al inicio del arreglo a
printf("la dirección de b %d, contiene %lf\n",b,*b);
b = b + 1;//b apunta a a[1]
printf("la dirección de b %d, contiene %lf\n",b,*b);
b = b + 3;//b apunta a a[4]
printf("la dirección de b %d, contiene %lf\n",b,*b);
b = b - 2;//b apunta a a[2]
printf("la dirección de b %d, contiene %lf\n",b,*b);
return 0;
}
Apuntadores y subíndices
La aritmética de apuntadores y los subíndices ¡son equivalentes!
#include <stdio.h>
main(){
double a[10]={3,4,1,8,2,3,4,5,7,0};
double *b;
int i;
b = a; //b apunta al inicio del arreglo a
for(i=0; i<10; i++)
printf("a[%d]=%lf\n", i, a[i]);
for(i=0; i<10; i++)
printf("*(b+%d)=%lf\n", i, *(b+i));
return 0;
}
¿Que valores tienen las variables?
int x, *px:
x *px y *py
float y, *py;
x = 5;
px = &x;
*px = 2*x + *px;
y = x;
py = y;
y = *py + x;
printf(“*p = %d x = %d\n”,*px,x);
printf(“*p = %f x = %f\n”,*py,y);
Tarea
Suponga la siguiente declaración:
float n1 = 7.3, n2;
Escriba una sentencia para cada una de las siguientes
acciones:
Declare ptrF como un apuntador a un objeto tipo float
Asigne la dirección de n1 a ptrF
Despliegue el valor del objeto apuntado por ptrF
Asigne el valor del objeto apuntado por ptrF a n2
Despliegue el valor de n2
Despliegue la dirección de n1
Despliegue la dirección almacenada en ptrF
Asigne a ptrF la dirección de n2
Asigne al valor del objeto apuntado por ptrF el valor
8.1
Despliegue el valor de n1
Despliegue el valor de n2
¿Que salida esperan?
#include <stdio.h>
int main(void)
{
char ch = 'c';
char *chptr = &ch;
int i = 20;
int *intptr = &i;
float f = 1.20000;
float *fptr = &f;
char *ptr = "Soy una Cadena";
printf("\n [%c], [%d], [%f], [%c], [%s]\n", *chptr, *intptr, *fptr, *ptr, ptr);
return 0;
}