2. No me diga que el cielo es el límite cuando hay
huellas en la luna.
Una de las mejores frases motivadoras sobre no
ponerse límites, que nos recuerda que el ser
humano puede ser capaz de cualquier cosa que se
proponga. Frase de Paul Brandt.
3. Objetivo
1. Adquirir los conceptos
básicos relacionados con
las EDD
2. Reconocer las
características de las
EDD
● 1.1 Punteros a estructuras
Contenido
5. Dirección y contenido
• Contenido
– Elemento guardado en
una posición de memoria
‘a’
222
0x3F
‘&’
…
6. Dirección y contenido
• Contenido
– Elemento guardado en
una posición de memoria
• Dirección
– Identificador de la
posición de memoria
– Puntero representa la
dirección de un elemento
de un tipo
‘a’
222
0x3F
‘&’
…
00
01
02
03
…
7. Dirección y contenido: ejemplo
• int *
– Puntero a entero
• & …
– Dirección de
• * …
– Valor contenido en
#include <stdio.h>
int main ( int argc,
char *argv[] )
{
int i = 3;
int *pi ;
i = 3;
pi = &i ;
printf(“%dn”,*pi) ;
return 0;
}
9. Paso de parámetros
PI, &i ) ;
i = 10 ;
float PI = 3.14 ;
prueba2 ( i, ‘a’,
…
void prueba2 ( int j, char c, float f, int pj )
{
/* ... */
}
10. Paso de parámetros
1) Se crea en pila las variables formales
PI, &i ) ;
i = 10 ;
float PI = 3.14 ;
prueba2 ( i, ‘a’,
…
void prueba2 ( int j, char c, float f, int pj )
{
/* ... */
}
11. Paso de parámetros
PI, &i ) ;
i = 10 ;
float PI = 3.14 ;
prueba2 ( i, ‘a’,
…
10 ‘a’ 3.14 0x
void prueba2 ( int j, char c, float f, int pj )
{
/* ... */
}
2) Se copia el valor de los parámetros reales
12. Paso de parámetros
PI, &i ) ;
i = 10 ;
float PI = 3.14 ;
prueba2 ( i, ‘a’,
…
10 ‘a’ 3.14 0x
void prueba2 ( int j, char c, float f, int pj )
{
/* ... */
}
13. Paso de parámetros
Fundamentos de programación en lenguaje C (fig.9.2)
void inc ( int j )
{
j = j + 1 ;
}
Paso de parámetro
por valor
#include <stdio.h>
int main (void)
{
int i = 10;
/* … */
inc(i) ;
/* … */
}
14. Paso de parámetros
/* … */
}
Paso de parámetro
por valor
#include <stdio.h>
int main (void)
{
int i = 10;
/* … */
10
void inc ( int j )
{
j = j + 1 ;
}
inc(i) ; 1) se copia
Fundamentos de programación en lenguaje C (fig.9.2)
i enj
15. Paso de parámetros
/* … */
}
j = j + 1 ;
}
Paso de parámetro
por valor
#include <stdio.h>
int main (void)
{
int i = 10;
/* … */
10
void inc ( int j )
{
inc(i) ; 1) se copia
i enj
2) se modifica
j (la copia)
Fundamentos de programación en lenguaje C (fig.9.2)
16. Paso de parámetros
#include <stdio.h>
int main (void)
{
int i = 10;
/* … */
/* … */
}
j = j + 1 ;
}
Paso de parámetro
por valor
10
void inc ( int j )
{
inc(i) ; 1) se copia
i enj
Paso de parámetro
por referencia
2) se modifica
j (la copia)
Fundamentos de programación en lenguaje C (fig.9.2)
17. Paso de parámetros
/* … */
/* … */
}
void inc ( int j )
{
j = j + 1 ;
}
Paso de parámetro
por valor
10
inc(i) ; 1) se copia
i enj
#include
int main
<stdio.h>
(void)
#inc
lude
int
main
<stdio.h
>
(void)
{
int
i
= 10;
{
i
n
t
i
= 3;
Paso de parámetro
por referencia
/* … */
inc(&i) ;
/* … */
}
void inc ( int *j )
{
*j = *j + 1 ;
}2) se modifica
j (la copia)
Fundamentos de programación en lenguaje C (fig.9.2)
18. Paso de parámetros
/* … */
/* … */
}
void inc ( int j )
{
j = j + 1 ;
}
Paso de parámetro
por valor
10
inc(i) ; 1) se copia
i enj
#include
int main
<stdio.h>
(void)
#inc
lude
int
main
<stdio.h
>
(void)
{
int
i
= 10;
{
i
n
t
i
= 3;
Paso de parámetro
por referencia
/* … */
/* … */
}
void inc ( int *j )
{
*j = *j + 1 ;
}
&i
inc(&i) ;
1) se copia
&i en j
2) se modifica
j (la copia)
Fundamentos de programación en lenguaje C (fig.9.2)
19. Paso de parámetros
/* … */
/* … */
}
void inc ( int j )
{
j = j + 1 ;
}
Paso de parámetro
por valor
10
inc(i) ; 1) se copia
i enj
#include
int main
<stdio.h>
(void)
#inc
lude
int
main
<stdio.h
>
(void)
{
int
i
= 10;
{
i
n
t
i
= 3;
Paso de parámetro
por referencia
/* … */
/* … */
}
void inc ( int *j )
{
*j = *j + 1 ;
}
&i
inc(&i) ;
1) se copia
&i en j
2) se modifica
j (la copia)
2) se modifica
i a través de *j
Fundamentos de programación en lenguaje C (fig.9.2)
20. Paso de parámetros: ejemplo
• La función inc
incrementa el valor
pasado por
referencia en j
• La función main
define una variable
i, incrementa su
valor y lo imprime
#include <stdio.h>
void inc ( int *j )
{
*j = *j + 1 ;
}
int main (void)
{
int i = 3;
inc(&i) ;
printf(“%dn”,i) ;
return 0;
}
21. #include <stdio.h>
#include <stdlib.h>
//* * ESTRUCTURAS * *
//Declaramos la estructura
struct datos
{
int codigo;
char nombre[15];
};
int main(int argc, char *argv[])
{
//Variable
struct datos persona;
//PARA METER VALORES
printf("Introduce el codigo:");
scanf("%d", &persona.codigo);
fflush(stdin);
printf("Introduce el nombre:");
gets(persona.nombre);
system("PAUSE");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
//* * ESTRUCTURAS CON PUNTEROS * *
//Declaramos la estructura
struct datos
{
int codigo;
char nombre[15];
};
int main(int argc, char *argv[])
{
//Variable
struct datos persona;
//Puntero
struct datos *p;
//Inicializar puntero
p=&per;
//PARA METER VALORES
printf("Introduce el codigo:");
scanf("%d",&p->codigo);
fflush(stdin);
printf("Introduce el nombre:");
gets(p->nombre);
system("PAUSE");
return 0;
}
22. #include <stdio.h>
#include <stdlib.h>
//* *ARRAYS DE ESTRUCTURAS CON PUNTEROS * *
//Declaramos la estructura
struct datos
{
int codigo;
char nombre[15];
};
int main(int argc, char *argv[])
{
int i;
struct datos array[3];
//Puntero
struct datos *p;
//Inicializar puntero
p=array;
//RECORRER ARRAY PARA METER VALORES
for(i=0;i<3;i++)
{
printf("Introduce el codigo:");
scanf("%d",&(p+i)->codigo);
fflush(stdin);
printf("Introduce el nombre");
gets((p+i)->nombre);
}
system("PAUSE");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
//* * ESTRUCTURAS CON PUNTEROS * *
//Declaramos la estructura
struct datos
{
int codigo;
char nombre[15];
};
int main(int argc, char *argv[])
{
struct datos per;
//Puntero
struct datos *p;
//Inicializar puntero
p=&per;
//PARA METER VALORES
printf("Introduce el codigo:");
scanf("%d",&p->codigo);
fflush(stdin);
printf("Introduce el nombre:");
gets(p->nombre);
system("PAUSE");
return 0;
}