Professional Documents
Culture Documents
Semana 9:
Punteros 1
Octubre del 2015
Objetivo
Al finalizar la clase el estudiante debe Entender y operar:
Variables y memoria
Definicin de puntero
Arreglos y punteros
Variables y memoria
Programa
int n = 35;
Memoria
n
35
0x7ff...c
n;
&n;
Comentario
// identificador de variable
// define y da valor a n
// direccin de n(supuesta)
// = 35
// = 0x7ff...c (& operador de direccin)
Definicin de puntero
Un puntero (por ejemplo ptr) guarda la direccin de otra
variable (por ejemplo n). Tiene dos atributos:
tipo de dato almacenado en n: int, char, etc.
valor
: direccin de n
int *ptr = &n;
Puntero constante
int a=10, b=20;
*p = 15;
p=&b;
Arreglos y Punteros
Programa
Memoria
nn1 2 3
Comentario
// identificador de arreglo
// define y da valores
// direccin de inicio (supuesta)
// = 0x7ff...a (direccin)
// = 1
// = 2
Operador sizeof()
sizeof(int);
// 4 (bytes)
sizeof(nn);
// 12 = 3 * 4 = Tamao del arreglo nn
Nmero de elementos de un arreglo: Es responsabilidad del
programador no superar la longitud del arreglo;
nn[3] = 4;
// no da errores de compilacin ni ejecucin
Notacin de punteros
nn
Valor
0x7ff...a
nn[0];
*nn;
10
nn[1];
*(nn+1);
20
nn[2];
*(nn+2);
30
nn[1] = 80;
*(nn+1) = 80;
80
n = fun(nn);
n = fun(nn);
Llama a funcin
Define a funcin
ptrNN[2]++;
(*(ptrNN+2))++;
Aritmtica de punteros
ptr++;
ptr--;
ptr = ptr + 2;
ptr = ptr * 2;
// A
// B
}
int miFun(int var, int *varRef, int n, int nn[]){
var
= 5;
// var
NO cambia en main(): paso por valor
*varRef = 6;
// varRef SI cambia en main(): paso por referencia
nn[0] = 7;
// var
SI cambia en main(): paso por referencia
}
Resultados de printf en A y B:
// A: 1, 2, 3, 10
// B: 1, 6, 3, 7