26
ARCOS @ UC3M Alejandro Calderón Mateos Sistemas Operativos sesión 2: aspectos del lenguaje C Grado en Ingeniería Informática Universidad Carlos III de Madrid

Clase02: lenguaje C: punteros y paso de parámetros (v1c)

Embed Size (px)

Citation preview

Page 1: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Sistemas Operativossesión 2: aspectos del lenguaje C

Grado en Ingeniería Informática

Universidad Carlos III de Madrid

Page 2: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Contenidos

• Punteros

• Paso de parámetros

Page 3: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Contenidos

• Punteros

• Paso de parámetros

Page 4: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Dirección y contenido

• Contenido

– Elemento guardado en una posición de memoria

‘a’

222

0x3F

‘&’

Page 5: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

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

00

01

02

03

‘a’

222

0x3F

‘&’

Page 6: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

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(“%d\n”,*pi) ;

return 0;

}

Page 7: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Dirección y contenido: ejemplo

• gcc –Wall –g –o e11 e11.c

– Wall: mostrar advertencias

– g: añadir información de depuración

– o: establecer el nombre del ejecutable

• ./e11– El directorio actual (.) no está

en la variable PATH

#include <stdio.h>

int main ( int argc,

char *argv[] )

{

int i = 3;

int *pi ;

i = 3;

pi = &i ;

printf(“%d\n”,*pi) ;

return 0;

}

Page 8: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Contenidos

• Punteros

• Paso de parámetros

Page 9: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros

void prueba2 ( int j, char c, float f, int pj )

{

/* ... */

}

Page 10: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros

i = 10 ;

float PI = 3.14 ;

prueba2 ( i, ‘a’, PI, &i ) ;

void prueba2 ( int j, char c, float f, int pj )

{

/* ... */

}

Page 11: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros

1) Se crea en pila las variables formales

i = 10 ;

float PI = 3.14 ;

prueba2 ( i, ‘a’, PI, &i ) ;

void prueba2 ( int j, char c, float f, int pj )

{

/* ... */

}

Page 12: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros

i = 10 ;

float PI = 3.14 ;

prueba2 ( i, ‘a’, PI, &i ) ;

void prueba2 ( int j, char c, float f, int pj )

{

/* ... */

}

10 ‘a’ 3.14 0x

2) Se copia el valor de los parámetros reales

Page 13: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros

i = 10 ;

float PI = 3.14 ;

prueba2 ( i, ‘a’, PI, &i ) ;

void prueba2 ( int j, char c, float f, int pj )

{

/* ... */

}

10 ‘a’ 3.14 0x

Page 14: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros

#include <stdio.h>

int main (void)

{

int i = 10;

/* … */

inc(i) ;

/* … */

}

Fundamentos de programación en lenguaje C (fig. 9.2)

void inc ( int j )

{

j = j + 1 ;

}

Paso de parámetro por valor

Page 15: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros

#include <stdio.h>

int main (void)

{

int i = 10;

/* … */

inc(i) ;

/* … */

}

Fundamentos de programación en lenguaje C (fig. 9.2)

void inc ( int j )

{

j = j + 1 ;

}

Paso de parámetro por valor

10

1) se copiai en j

Page 16: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros

#include <stdio.h>

int main (void)

{

int i = 10;

/* … */

inc(i) ;

/* … */

}

Fundamentos de programación en lenguaje C (fig. 9.2)

void inc ( int j )

{

j = j + 1 ;

}

Paso de parámetro por valor

10

1) se copiai en j

2) se modifica j (la copia)

Page 17: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros

#include <stdio.h>

int main (void)

{

int i = 10;

/* … */

inc(i) ;

/* … */

}

Fundamentos de programación en lenguaje C (fig. 9.2)

void inc ( int j )

{

j = j + 1 ;

}

Paso de parámetro por valor

10

1) se copiai en j

Paso de parámetro por referencia

2) se modifica j (la copia)

Page 18: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros

#include <stdio.h>

int main (void)

{

int i = 10;

/* … */

inc(i) ;

/* … */

}

Fundamentos de programación en lenguaje C (fig. 9.2)

void inc ( int j )

{

j = j + 1 ;

}

Paso de parámetro por valor

10

1) se copiai en j

Paso de parámetro por referencia

#include <stdio.h>

int main (void)

{

int i = 3;

/* … */

inc(&i) ;

/* … */

}

void inc ( int *j )

{

*j = *j + 1 ;

}2) se modifica

j (la copia)

Page 19: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros

#include <stdio.h>

int main (void)

{

int i = 10;

/* … */

inc(i) ;

/* … */

}

Fundamentos de programación en lenguaje C (fig. 9.2)

void inc ( int j )

{

j = j + 1 ;

}

Paso de parámetro por valor

10

1) se copiai en j

Paso de parámetro por referencia

#include <stdio.h>

int main (void)

{

int i = 3;

/* … */

inc(&i) ;

/* … */

}

void inc ( int *j )

{

*j = *j + 1 ;

}

&i

1) se copia&i en j

2) se modifica j (la copia)

Page 20: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros

#include <stdio.h>

int main (void)

{

int i = 10;

/* … */

inc(i) ;

/* … */

}

Fundamentos de programación en lenguaje C (fig. 9.2)

void inc ( int j )

{

j = j + 1 ;

}

Paso de parámetro por valor

10

1) se copiai en j

Paso de parámetro por referencia

#include <stdio.h>

int main (void)

{

int i = 3;

/* … */

inc(&i) ;

/* … */

}

void inc ( int *j )

{

*j = *j + 1 ;

}

&i

1) se copia&i en j

2) se modifica j (la copia)

2) se modifica i a través de *j

Page 21: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros: ejemplo

• La función incincrementa el valor pasado por referencia en j

• La función maindefine 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(“%d\n”,i) ;

return 0;

}

Page 22: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros: ejemplo

• gcc –Wall –g –o e12 e12.c

– Wall: mostrar advertencias

– g: añadir información de depuración

– o: establecer el nombre del ejecutable

• ./e12– El directorio actual (.) no está

en la variable PATH

#include <stdio.h>

void inc ( int *j )

{

*j = *j + 1 ;

}

int main (void)

{

int i = 3;

inc(&i) ;

printf(“%d\n”,i) ;

return 0;

}

Page 23: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros: ejemplo

• gcc –Wall –g –o e13 e13.c

– Wall: mostrar advertencias

– g: añadir información de depuración

– o: establecer el nombre del ejecutable

• ./e13– El directorio actual (.) no está

en la variable PATH

#include <stdio.h>

void inc ( int *j )

{

*j = *j + 1 ;

}

int main (void)

{

int i = 3;

inc( i) ;

printf(“%d\n”,i) ;

return 0;

}

Page 24: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros: ejemplo

Page 25: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Paso de parámetros: ejemplo

• gcc –Wall –g –o e14 e14.c

– Wall: mostrar advertencias

– g: añadir información de depuración

– o: establecer el nombre del ejecutable

• ./e14– El directorio actual (.) no está

en la variable PATH

#include <stdio.h>

void inc ( int *j )

{

if (j==NULL)

printf(“j=NULL\n”) ;

else *j = *j + 1 ;

}

int main (void)

{

int i = 3;

inc(i) ;

printf(“%d\n”,i) ;

return 0;

}

Page 26: Clase02: lenguaje C: punteros y paso de parámetros (v1c)

ARCOS @ UC3MAlejandro Calderón Mateos

Sistemas Operativossesión 2: aspectos del lenguaje C

Grado en Ingeniería Informática

Universidad Carlos III de Madrid