Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO,...
Transcript of Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO,...
![Page 1: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/1.jpg)
Punteros en CISO, 2012-2013
Pablo González Nalda
Depto. de Lenguajes y Sistemas Informáticos
EU de Ingeniería de Vitoria-Gasteiz, UPV/EHU
26 de febrero de 2013
![Page 2: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/2.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Punteros yestructuras
¾Máspreguntas?
Basado en: A TUTORIAL ON POINTERS AND ARRAYS IN C
by Ted Jensen
http://pweb.netcom.com/~tjensen/ptr/cpoint.htm
2 / 26
![Page 3: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/3.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Punteros yestructuras
¾Máspreguntas?
Contenidos de la presentación
1 Qué es un puntero
2 Tipos de punteros, funciones y tablas
3 Punteros y cadenas
4 Punteros y estructuras
5 ¾Más preguntas?
3 / 26
![Page 4: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/4.jpg)
Contenidos
Qué es unpuntero
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Punteros yestructuras
¾Máspreguntas?
1 Qué es un puntero
2 Tipos de punteros, funciones y tablas
3 Punteros y cadenas
4 Punteros y estructuras
5 ¾Más preguntas?
4 / 26
![Page 5: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/5.jpg)
Contenidos
Qué es unpuntero
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Punteros yestructuras
¾Máspreguntas?
Variables
int k,j;
k=2;
// Lvalue/Rvalue
j=7;
k=j;
5 / 26
![Page 6: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/6.jpg)
Contenidos
Qué es unpuntero
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Punteros yestructuras
¾Máspreguntas?
Punteros
Punteros o apuntadores (pointers):
int k,j;
k=2; j=7;
int *ptr;
ptr=NULL;
ptr=&k;
*ptr=7;
printf("j %d @ %p\n", j, (void *)&j);
printf("k %d @ %p\n", k, (void *)&k);
printf("ptr %p @ %p\n", ptr, (void*)&ptr);
printf(" Apuntado por ptr es %d\n", *ptr);
6 / 26
![Page 7: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/7.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
El tamaño delos punteros
Punteros yfunciones
Punteros ytablas
Punteros ycadenas
Punteros yestructuras
¾Máspreguntas?
1 Qué es un puntero
2 Tipos de punteros, funciones y tablas
3 Punteros y cadenas
4 Punteros y estructuras
5 ¾Más preguntas?
7 / 26
![Page 8: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/8.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
El tamaño delos punteros
Punteros yfunciones
Punteros ytablas
Punteros ycadenas
Punteros yestructuras
¾Máspreguntas?
El tamaño importa
En C, el tamaño sí que importa. . .
int *ptr, k;
k=7;
printf("Tamaño: %d\n", sizeof(int));
*ptr=k;
ptr++; // ¾adónde apuntará?
8 / 26
![Page 9: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/9.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
El tamaño delos punteros
Punteros yfunciones
Punteros ytablas
Punteros ycadenas
Punteros yestructuras
¾Máspreguntas?
Punteros void
void *p;
9 / 26
![Page 10: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/10.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
El tamaño delos punteros
Punteros yfunciones
Punteros ytablas
Punteros ycadenas
Punteros yestructuras
¾Máspreguntas?
Punteros y funciones
Punteros para paso por referencia (es decir, paso de puntero
por valor). Tanto los parámetros como las variables creadas en
una función son datos que se almacenan en la pila y
desaparecen cuando se sale de la función.
void cambia (int *a, int *b) {
int t;
t=*a;
*a=*b;
*b=t;
}
Uso:
cambia(&t[i],&t[j]);
10 / 26
![Page 11: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/11.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
El tamaño delos punteros
Punteros yfunciones
Punteros ytablas
Punteros ycadenas
Punteros yestructuras
¾Máspreguntas?
Punteros y tablas (arrays)
Puntero para recorrer una tabla
int tabla[] = {1,23,17,4,-5,100};
int *ptr;
int i;
ptr = &tabla[0]; /*1*/
ptr = tabla; /*2*/
printf("\n\n");
for (i = 0; i < 6; i++) {
/*A*/ printf("tabla[%d] = %d",i,tabla[i]);
/*B*/ printf("ptr + %d = %d\n",i, *(ptr + i));
}
11 / 26
![Page 12: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/12.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Cadenas
Copia decadenas
Punteros yestructuras
¾Máspreguntas?
1 Qué es un puntero
2 Tipos de punteros, funciones y tablas
3 Punteros y cadenas
4 Punteros y estructuras
5 ¾Más preguntas?
12 / 26
![Page 13: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/13.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Cadenas
Copia decadenas
Punteros yestructuras
¾Máspreguntas?
Cadenas o strings
En C, una cadena es una tabla de caracteres terminada con un
cero binario (ASCII 0 o '0\0')
char cad[40];
cad[0] = 'h';
cad[1] = 'o';
cad[2] = 'l';
cad[3] = 'a';
cad[4] = '\0';
char cad[40]= {'H','o','l','a','\0'};
char cad[40]= "Hola";
13 / 26
![Page 14: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/14.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Cadenas
Copia decadenas
Punteros yestructuras
¾Máspreguntas?
Copia de cadenas con punteros
char *my_strcpy(char *d, char *f) {
char *p = d;
while (*f != '\0')
*p++ = *f++;
*p = '\0';
return d;
}
// while (*f) cuando lo apuntado sea 0 es falso
14 / 26
![Page 15: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/15.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Cadenas
Copia decadenas
Punteros yestructuras
¾Máspreguntas?
Copia de cadenas con índices
char *my_strcpy(char d[], char f[]) {
int i=0;
while (f[i]!= '\0') {
d[i] = f[i];
i++;
}
d[i] = '\0';
return d;
}
// *(dest + i) = *(source + i);
15 / 26
![Page 16: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/16.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Punteros yestructuras
Estructuras
Estructuras ypunteros
Estructuras ymalloc
Tablas deestructuras
Ejemplo deárbol binario
¾Máspreguntas?
1 Qué es un puntero
2 Tipos de punteros, funciones y tablas
3 Punteros y cadenas
4 Punteros y estructuras
5 ¾Más preguntas?
16 / 26
![Page 17: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/17.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Punteros yestructuras
Estructuras
Estructuras ypunteros
Estructuras ymalloc
Tablas deestructuras
Ejemplo deárbol binario
¾Máspreguntas?
Estructuras
struct ficha {
char ap[20];
char nom[20];
int edad;
float altura;
};
struct ficha yo;
int main(void) {
strcpy(yo.ap,"G.N.");
strcpy(yo.nom,"P.");
printf("\n%s, ",yo.ap);
printf("%s\n",yo.nom);
return 0;
}17 / 26
![Page 18: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/18.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Punteros yestructuras
Estructuras
Estructuras ypunteros
Estructuras ymalloc
Tablas deestructuras
Ejemplo deárbol binario
¾Máspreguntas?
Estructuras y punteros
struct ficha *p;
p = &yo;
(*p).edad = 42;
p->edad = 42;
void imprime(struct ficha *p)
{
printf("\n%s, ", p->ap);
printf("%s ", p->nom);
printf("%d\n", p->edad);
}
18 / 26
![Page 19: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/19.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Punteros yestructuras
Estructuras
Estructuras ypunteros
Estructuras ymalloc
Tablas deestructuras
Ejemplo deárbol binario
¾Máspreguntas?
Estructuras y malloc
struct ficha *p;
p = (struct ficha *) malloc(sizeof(struct ficha));
19 / 26
![Page 20: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/20.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Punteros yestructuras
Estructuras
Estructuras ypunteros
Estructuras ymalloc
Tablas deestructuras
Ejemplo deárbol binario
¾Máspreguntas?
Usando typedef con estructuras y malloc
typedef struct {
char ap[20];
char nom[20];
int edad;
float altura;
} Ficha;
Ficha *p;
p = (Ficha *) malloc(sizeof(Ficha));
20 / 26
![Page 21: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/21.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Punteros yestructuras
Estructuras
Estructuras ypunteros
Estructuras ymalloc
Tablas deestructuras
Ejemplo deárbol binario
¾Máspreguntas?
Uso alternativo de typedef con estructuras ymalloc
struct {
char ap[20];
char nom[20];
int edad;
float altura;
} ficha;
typedef struct ficha *FICHA;
FICHA p;
p = malloc(sizeof(*FICHA));
21 / 26
![Page 22: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/22.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Punteros yestructuras
Estructuras
Estructuras ypunteros
Estructuras ymalloc
Tablas deestructuras
Ejemplo deárbol binario
¾Máspreguntas?
Tablas de estructuras
#define TAMTABLA 10
FICHA *t; // struct ficha **t;
t = malloc(sizeof(FICHA)*TAMTABLA);
for (i=0; i<TAMTABLA; i++) {
t[i]=malloc(sizeof(*FICHA));
llenaficha(t[i]);
}
22 / 26
![Page 23: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/23.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Punteros yestructuras
Estructuras
Estructuras ypunteros
Estructuras ymalloc
Tablas deestructuras
Ejemplo deárbol binario
¾Máspreguntas?
Ejemplo de árbol binario
typedef struct node {
int value;
struct node *leftChild;
struct node *rightChild;
} node;
typedef struct tree {
int numNodes;
struct node** nodes;
} tree;
tree *initTree() {
/* in C (not C++), don't have to cast malloc's return
pointer, it's implicitly converted from void* */
tree* atree = malloc(sizeof(tree));
node* anode = malloc(sizeof(node));
atree->nodes[0] = anode;
return atree;
}
23 / 26
![Page 24: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/24.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Punteros yestructuras
¾Máspreguntas?
1 Qué es un puntero
2 Tipos de punteros, funciones y tablas
3 Punteros y cadenas
4 Punteros y estructuras
5 ¾Más preguntas?
24 / 26
![Page 25: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/25.jpg)
Contenidos
Qué es unpuntero
Tipos depunteros,funciones ytablas
Punteros ycadenas
Punteros yestructuras
¾Máspreguntas?
¾Más preguntas?
¾Más preguntas?
25 / 26
![Page 26: Punteros en C - UPV/EHUlsi.vc.ehu.es/pablogn/docencia/manuales/C/Punteros...Punteros en C ISO, 2012-2013 Pablo González Nalda Depto. de Lenguajes y Sistemas Informáticos EU de Ingeniería](https://reader033.fdocuments.net/reader033/viewer/2022053000/5f04ced87e708231d40fcede/html5/thumbnails/26.jpg)
Punteros en CISO, 2012-2013
Pablo González Nalda
Depto. de Lenguajes y Sistemas Informáticos
EU de Ingeniería de Vitoria-Gasteiz, UPV/EHU
26 de febrero de 2013