Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programación en C 1
Índice
Programación en C 3
Punteros
Programación en C 4
Punteros – ejemplo operador &
/************************************************************************\
* Programa: pr_oper&.c *
* Descripción: Prog. que imprime direcciones de memoria con & *
* Autor: Pedro Corcuera *
* Revisión: 1.0 2/02/2008 *
\************************************************************************/
#include <stdio.h>
int main()
{
char a;
char b;
int n;
float x;
return 0;
}
Programación en C 5
Punteros - declaración
Programación en C 6
Punteros – operadores & y *
Programación en C 7
Punteros – declaración e inicialización
Programación en C 8
Punteros – declaración, asignación y
dereferencia
int main()
Dirección Contenido Gráfica
{ px
px-> 35: ? ? ? ? ?
int *px, y = 3; y -> 39: 0 0 0 3 y
3
px = &y; px
px-> 35: 0 0 0 39
/* px apunta a y */ y -> 39: 0 0 0 3
39
y
3
*px = 5; px
/* y vale 5 */ px-> 35: 0 0 0 39 39
0 0 0 5 y
y -> 39: 5
}
Programación en C 9
Punteros – declaración, asignación y
dereferencia
int main()
{
int *p, *q;
int a = -123;
int b;
p = &a;
q = p;
printf(“%d %d”,*p, *q);
b = *p;
printf(“%d %d”,b, a);
}
Programación en C 10
Punteros – declaración, asignación y
dereferencia
int main()
{
int *p, *q;
int x;
p = q = &x;
x = 4;
x = x + 3;
*p = 8;
*&x = *p + *q;
x = *p * *q;
}
Programación en C 11
Puntero nulo - NULL
Programación en C 12
Punteros - void
Programación en C 13
Puntero a puntero
printf(“%3d”, a);
printf(“%3d”, *p);
printf(“%3d”, **q);
Programación en C 14
Aritmética y comparación de punteros
p_char + 1
++
p_char
3F0 3F1 3F2 3F3 3F4 3F5 3F6 3F7 3F8 3F9 3FA 3FB
p_int ++ p_int + 1
sizeof(int)=4
Programación en C 16
Aritmética de Punteros
v[7]
Programación en C 17
Arrays y punteros
Programación en C 19
Equivalencias entre arrays y punteros
/* equivalencias */
ptr = array_a;
ptr = &array_a[0];
Programación en C 20
Equivalencias entre arrays y punteros
Programación en C 21
Equivalencias entre arrays y punteros
Programación en C 22
Equivalencias entre arrays y punteros
pb=a; a 11 20 30 40 50
*pb=11; pb pc
pc=&a[3]; a 11 20 30 44 50
*pc=44; pb pc
Programación en C 23
Punteros y arrays multidimensionales
Programación en C 24
Punteros y arrays multidimensionales
. \n\0
Programación en C 27
Argumentos de main
Programación en C 28
Argumentos de main
Programación en C 29
Ejemplo: imprime argumentos de main
/************************************************************************\
* Programa: arg_main.c *
* Descripción: Prog. que imprime el comando y los argumentos de main *
* Uso: >progcomp arg1 arg2 arg3 *
* Autor: Pedro Corcuera *
* Revisión: 1.0 2/02/2008 *
\************************************************************************/
#include <stdio.h>
return 0;
}
Programación en C 30
Punteros a estructuras
Programación en C 31
Punteros a estructuras
Programación en C 32
Punteros a estructuras
Programación en C 33
Asignación dinámica de memoria
stdlib.h
Programación en C 35
Memoria Dinámica - uso
#include <stdlib.h>
Estática Dinámica
int a,b[2]; a
int *i; b[0]
b[1]
char *c; i
c
i=(int *)malloc(sizeof(int)); a
c=(char *)malloc(sizeof(char)); b[0]
b[1]
i *i
c *c
free(i); a
c=(char *)realloc(c,sizeof(char)*9); b[0]
b[1]
i
c *c
Programación en C 36
Memoria Dinámica – uso malloc
Programación en C 37
Memoria Dinámica – uso calloc
Programación en C 38
Memoria Dinámica – uso free
Programación en C 39
Ejemplo: array dinámico
/************************************************************************\
* Programa: array_dinamico.c *
* Descripción: Prog. que crea una array dinamico y genera otro con los *
* elementos pares del primer array y lo imprime *
\************************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int dim_usu; /* dimension del vector del usuario */
int dim_par; /* dimensión del vector de elementos pares */
int n; /* indice para los for */
int m; /* indice para recorrer arrya de pares */
int *pvec_usu; /* puntero al vector introducido por el usuario */
int *pvec_par; /* puntero al vector elementos pares (dinamico) */
Programación en C 40
Ejemplo: array dinámico
else
{
for (n = 0; n < dim_usu; n++) /* pedir elementos del vector */
{ printf("Elemento %d = ", n); scanf("%d", &(pvec_usu[n]));}
dim_par = 0;
for (n = 0; n < dim_usu; n++)
if ((pvec_usu[n] % 2) == 0) dim_par++;
pvec_par = (int *) calloc( dim_par, sizeof(int));
if (pvec_par == NULL) { /* si no hay memoria */
printf("Error: no hay memoria para un vector de %d elementos\n",
dim_par);
}
else
{ /* se copian los elementos pares */
m = 0;
for (n = 0; n < dim_usu ; n++)
if ((pvec_usu[n] % 2) == 0) { pvec_par[m] = pvec_usu[n]; m++;}
printf("\n-----------------------------\n");
for (n = 0; n < dim_par ; n++)
printf("Elemento par %d = %d \n", n, pvec_par[n]);
}
free (pvec_par);
}
free (pvec_usu);
}
Programación en C 41
Matriz con número de columnas diferentes
- Se representa
como un
array de
arrays
(puntero a
puntero)
dinámico.
Programación en C 42
Punteros a cadenas de caracteres
Programación en C 43
Estructuras autoreferenciadas
Programación en C 44