El lenguaje de Programación C Fernando J. Pereda.

Slides:



Advertisements
Presentaciones similares
Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información Introducción a C Sistemas Operativos.
Advertisements

Curso de java básico (scjp)
DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
PROGRAMACIÓN EN C.
Fundamentos de la Programación Estructurada
Funciones. Programación, Algoritmos y Estructuras de Datos.
INFORMATICA I Funciones CLASE 13.
Programación en C (Segunda Parte) DATSI, FI, UPM José M. Peña
Tema 1. Introducción a la programación (Lenguaje java).
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
LENGUAJE “C” Programación.
Programación III Clase 07 Funciones.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA TRES ASIGNACION.
Archivos.
El lenguaje de programación C - Identificadores y variables – Isidro González Caballero ( Introducción.
Introducción a los punteros Prof. Domingo Hernández.
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
Informática Ingeniería en Electrónica y Automática Industrial
PUNTEROS Y REFERENCIAS
PROGRAMACIÓN MULTIMEDIA
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.

LENGUAJE “C” Programación.
ARREGLOS. La sintaxis para declarar e inicializar un array será: Tipo_de_variable[ ] Nombre_del_array = new Tipo_de_variable[dimensión]; También podemos.
Conceptos y Lenguaje Imperativo
Introducción al Lenguaje C (I) Tipos básicos, arrays y punteros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión
AYUDANTÍA 2 Lenguaje Imperativo y Java. Punteros Dirección a memoria (puede apuntar a NULL). Permite trabajar con memoria (variables dinámicas de heap).
Introducción a punteros en C
Algunas ideas básicas de C++
Programación II Sesión 3. TABLA DE CONTENIDO  Tipos de Datos en C  Delimitadores  Tipo Char  Tipo Int  Tipo Float  Tipo Double  Constantes  Operadores.
LENGUAJE C. El lenguaje de programación C  El C es un lenguaje de programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell  Evolución.
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
Funciones en lenguaje C 2 Funciones Definición: – Las funciones son los bloques de construcción básicos de C. Dentro de ellas se da toda la actividad.
Control, adquisición y monitoreo con Arduino y Visual Basic .net
Nociones básicas sobre C++
Taller de Java Universidad de los Andes
BREVE INTRODUCCION A LA PROGRAMACION
¿Cómo almacenar grandes cantidades de datos?
Arreglos (Arrays) Programación 1.
Programación en C - manejo de Archivos
Algunas ideas básicas de C++
Métodos y parámetros.
FUNCIONES Y PROCEDIMIENTOS
TIPOS DE DATOS Cadenas y caracteres PARCIAL III.
Algunas ideas básicas de C++
Definición y Conversión de datos
Nociones básicas sobre C++
Programación I MC Beatriz Beltrán Martínez
Clases y Objetos en Java
Fundamentos del lenguaje de programación Condicionales, ciclos, Métodos, enumeraciones Escuela Técnica Superior Kinal Instructor Edwin Tumax.
Nociones básicas sobre C++
Manejo de Punteros y objetos en memoria dinámica en C++
Unidad 3. Introducción a la programación
Algunas Características de C++ no presentes en C
Fundamentos básicos del lenguaje C#. Parte 1 Introducción a C#
Manejo de Punteros y objetos en memoria dinámica en C++
Programación I MC José Andrés Vázquez Flores
Arreglos en Java.
Manejo de Punteros y objetos en memoria dinámica en C++
Informática Ingeniería en Electrónica y Automática Industrial
Curso de Programación Estructurada
Algunas Características de C++ no presentes en C
String, random y stream en java
Informática Ingeniería en Electrónica y Automática Industrial
Manejo de Punteros y objetos en memoria dinámica en C++
Puntero #include int main(int argc, char *argv[]) { int myVar = 378; printf("El valor de la variable es: %d\n", myVar); printf("Dirección de memoria de.
Manejo de Punteros y objetos en memoria dinámica en C++
Algunas Características de C++ no presentes en C
Transcripción de la presentación:

El lenguaje de Programación C Fernando J. Pereda

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda ¿Por qué aprender C? ● Portable y muy extendido ● Estándar (C89, C99) ● El lenguaje de los sistemas ● Un lenguaje fácil (no, no es broma)

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda ¿Por qué ignorar C? ● En la Universidad enseñan Java

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Hola Mundo #include int main(int argc, char *argv[]) { printf(“Hola Mundo!\n”); return EXIT_SUCCESS; }

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Variables y funciones ● Zonas de memoria ● Permiten guardar datos ➔ Información ➔ Código ● Tienen nombre y tipo

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Tipos básicos y arrays ● Numéricos ➔ short, int, long, float, double ● Otros ➔ char, punteros ● Muchas variables juntas array

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Algunas declaraciones /* Un entero sin inicializar */ /* Un entero inicializado */ /* Un array de 34 enteros */ /* Un entero largo sin signo */ /* Un entero sin signo */ int a; int b = 3; int a[34]; unsigned long n; unsigned c;

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Hola Mundo – Diseccionado #include int main(int argc, char *argv[]) { printf(“Hola Mundo!\n”); return EXIT_SUCCESS; } Incluir funciones externas Definición de main Llamada a una función Valor devuelto por la función

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Definiciones y declaraciones ● Declarar antes de definir o usar ● Las declaraciones se agrupan en ficheros cabecera (algo.h) /* * Yo soy un comentario * los compiladores me ignoran */ int mivariable; /* declaración */ char una_funcion(int a, long b); /* declaración */ int suma(int a, int b) /* definición Y declaración { * de una función que devuelve return (a + b); * un int y recibe dos int. } */

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Estructuras de control (I) if (a == b) { hacer_algo_inteligente(); } else if (! algo) { hacer_otra_cosa(b); } else { int i; for (i = 0; i < a; i++) { switch (f(i)) { case 1: /* algo especial */ break; default: /* algo común */ break; }

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda printf ● Imprimir 'cosas' ➔ Similar a System.out.println printf(“Hola %s\n“, “Mundo”); int n = 45; printf(“n = %d\n”, n); char *cadena = “Blah”; printf(“Una cadena: %s\n”, cadena);

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Estructuras de datos (I) ● Clave para el éxito de C ● Unen variables de distinto tipo struct punto { int x; int y; }; struct persona { char nombre[20]; char dni[10]; }; struct alumno { char nia[10]; struct persona info_personal; };

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Estructuras de datos (II) ● Funciones que reciben y devuelven estructuras struct punto crear_punto(int x, int y) { struct punto p; p.x = x; p.y = y; return p; } int coordenada_x(struct punto p) { return p.x; }

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Hemos aprendido ● Declarar variables y funciones ● Definir y llamar funciones ● Controlar el código que se ejecuta ● Crear estructuras de datos

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda ¿Cómo funciona todo esto? (I) 0x c 0x x x c 0x x x x

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda ¿Cómo funciona todo esto? (II) 0x c 0x x x c 0x x x x int a; a

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda ¿Cómo funciona todo esto? (III) 0x000001c8 0x c 0x x x c 0x x x x int a; char c; a = 456; a c

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda ¿Cómo funciona todo esto? (IV) 0x000001c8 0x c 0x x x c 0x x x x int a; char c; a = 456; c = 'Z'; a 0x5 a c

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda ¿Cómo funciona todo esto? (V) ● Paso de parámetros por valor (copia) ➔ ¡Las estructuras y los arrays también! ● No existen 'referencias' ➔ Rendimiento pobre ➔ Poco flexible Las funciones no pueden modificar estructuras ni variables No se puede 'devolver dos valores'

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Solución ● Que existan los punteros ● Un puntero es un tipo básico más ● Un puntero guarda la dirección de otra variable o función int *p1; char *p2; struct mi_struct *p3;

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Nuevos operadores ● Obtener dirección: & ● Acceder a lo apuntado: * int a; int b; int *p; a = 34; p = &a; /* p apunta a a */ b = *p; /* b vale 34 */

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Punteros diseccionados (I) 0x000001c8 0x c 0x x x c 0x x x x int a; int b; int *p; a = 456; a b p

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Punteros diseccionados (II) 0x000001c8 0x c 0x x x c 0x x x x int a; int b; int *p; a = 456; p = &a; a b p

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Punteros diseccionados (III) 0x000001c8 0x c 0x x x c 0x x x x int a; int b; int *p; a = 456; p = &a; b = *p; a b p

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Punteros diseccionados (IV) 0x x000001c8 0x c 0x x x c 0x x x x int a; int b; int *p; a = 456; p = &a; b = *p; *p = 3; a b p

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Punteros diseccionados (V) 0x x000001c8 0x c 0x x c 0x x x c 0x x x x int a; int b; int *p; a = 456; p = &a; b = *p; *p = 3; int **pd; pd = &p; a b p pd

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Punteros diseccionados (VI) 0x x000001c8 0x x x c 0x x x c 0x x x x int a; int b; int *p; a = 456; p = &a; b = *p; *p = 3; int **pd; pd = &p; *pd = &b; a b p pd

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Punteros diseccionados (VII) 0x x x x x c 0x x x c 0x x x x int a; int b; int *p; a = 456; p = &a; b = *p; *p = 3; int **pd; pd = &p; *pd = &b; **pd = 1; a b p pd

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Tamaños ● char <= short <= int <= long ● float <= double ● T* == P* ● El tamaño de una estructura no es la suma de los tamaños de sus miembros.

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Algunas consideraciones ● Los punteros son 'baratos' ● Son fuente de dolores de cabeza y frustraciones ● Dan miedo ➔ ¡Pero en Java (casi) TODO es un puntero y a nadie le da miedo!

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda ¿Dices que en Java qué? (I) ● Que en Java, un objeto, es un puntero. public class Punteros { public static void main(String[] args) { String a = null; String b = new String(“Algo”); boolean iguales = a.equals(b); }

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda ¿Dices que en Java qué? (II) Exception in thread "main" java.lang.Null Pointer Exception at Punteros.main(Punteros.java:5)

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Segmentation Fault ● Equivalente al nullPointerException ● Se obtiene al acceder a una dirección no válida (puntero no válido) ● La única forma de evitarlo es ser capaz de entenderlo (y reproducirlo)

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Segmentation Faults (I) int main(int argc, char *argv[]) { int *p = 0; *p = 23; return 0; } int main(int argc, char *argv[]) { return *((int *)0); }

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda ¿Dónde viven las variables? (I) ● Globales y estáticas (static) ● Locales ● Registros (register)

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda ¿Dónde viven las variables? (II) Globales Estáticas Locales Pila (Stack) Datos (.data)

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda ¿Dónde viven las variables? (III) ● Las variables register no 'tienen' dirección de memoria. ➔ No se pueden obtener punteros a ellas.

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Punteros a variables locales (I) fun main int main(int argc, char *argv[]) { int a = 23; int b; b = fun(a); return b; } int fun(int n) { int c = n; return 2 * c; } argc argv ab c n

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Punteros a variables locales (II) int main(int argc, char *argv[]) { int *p; int b; p = f(); b = *p; return b; } int *f(void) { int a = 45; return &a; } main p b

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Punteros a variables locales (III) int main(int argc, char *argv[]) { int *p; int b; p = f(); b = *p; return b; } int *f(void) { int a = 45; return &a; } main p b f a

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Punteros a variables locales (IV) int main(int argc, char *argv[]) { int *p; int b; p = f(); b = *p; return b; } int *f(void) { int a = 45; return &a; } main p b

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Cadenas de caracteres (I) ● No existen ● Pero se pueden 'simular' ● Puntero a una zona de memoria con caracteres acabada en el byte 0. char *cadena;

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Cadenas de carcacteres (II) char *s = “Algo”; 0x x c 0x x x c 0x x x x x4 1 0x6 f 0x6 7 0x6 c 0x0 s

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Const y otras hierbas ● 'const' permite hacer las interfaces algo más seguras. ● No tiene por qué generar mejor código. const int n = 3; /* El valor de n no cambia */

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Declaraciones 'raras' char *p; const char *p; char *const p; const char *const p;

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Punteros a funciones char *(*fun)(int *, const struct *const punto); int (*compar)(const void*, const void*);

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Conversiones entre punteros T* void* T* T* void* P*

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Memoria dinámica ● Esta memoria vive en la sección heap ➔ El heap se encuentra tras la zona.data ● Si no se libera ¡ FUGA ! char *p = malloc(n_bytes); /*... código que usa p... */ free(p);

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Segmentation Fault más corto ● Programa que provoca un segfault y ocupa SOLO 5 bytes

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Segmentation Fault más corto ● Programa que provoca un segfault y ocupa SOLO 5 bytes main;

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Bibliografía ● The C Programming Language – Brian Kernighan & Dennis Ritchie ● Mastering Algorithms with C – Kyle Loudon

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda ¿ Preguntas ? ¿?

El lenguaje de Programación C – Copyright © 2007 Fernando J. Pereda Muchas gracias por venir