La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Copias: 1
Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información Introducción a C Sistemas Operativos.

Presentaciones similares


Presentación del tema: "Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información Introducción a C Sistemas Operativos."— Transcripción de la presentación:

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

2 Windows – Visual Studio Linux / Solaris – gcc Compiladores

3 archivo.c #include int main(void) { int a = 1; int b = 2; int c; c = a + b; printf("La suma de las variables es: %d\n", c); } Consola # gcc archivo.c –o archivo #./archivo La suma de las variables es: 3 Mi primer programa en C

4 int (4 bytes) char (1 byte) puntero a tipo de datos (4 bytes) Tipos de datos (32bits)

5 Medianamente tipado. Toda la memoria se puede castear como otro tipo de datos. Todo devuelve un valor por ende todo se puede preguntar. Ej: If (a+b). Si ==0 falso y si !=0 verdadero El punto de inicio del programa es la función main. El código se puede ampliar mediante el uso de bibliotecas. Introducción a C

6 all: make clean make archivo clean: rm archivo archivo: gcc –ggdb archivo.c –o archivo Makefile – Ejemplo

7 debian:~/charlasC# make make clean make[1]: Entering directory `/root/charlasC' rm archivo make[1]: Leaving directory `/root/charlasC' make archivo make[1]: Entering directory `/root/charlasC' gcc -ggdb archivo.c -o archivo make[1]: Leaving directory `/root/charlasC' debian:~/charlasC#

8 B0CACACA Punteros Proceso Código (solo lectura) Datos (memoria dinámica) Stack (asignaciones estáticas) #include int main(void) { int a = 39; char *b; b = (char*) malloc(128); } 39a ????? ??????????????? ???????????????? B0CACACA b

9 #include int main(void) { int a = 1; char b = 'L'; int *c; c = &a; a = a + 1; printf("La variable 'a' vale: %d y la variable 'c' lo mismo: %d y la variable b: %c\n", a, *c, b); } Operadores & y * Puntero a un entero c y a referencian la misma variable

10 #include int main(void) { char[20] nombre; char *pnombre; strcpy (nombre, "Maria"); nombre[4] = 'o'; Printf ("El valor de nombre es %s y su long: %d\n", nombre, strlen(nombre)); pnombre = (char*)malloc(sizeof(char)*20); if (!pnombre) { printf("Se asigno la memoria"); } else { printf("La asignación falló"); } free (pnombre); } Strings – cadenas

11 Streams != Strings Hola char cadena[10]; Un stream es una secuencia de chars contiguos (vector) Un caso particular de los streams es el String, el cual es finalizado con \0 Hola\0 char cadena[10]; Todas las operaciones sobre strings (, printf, etc), no debe ser ejecutada sobre streams!

12 Sobre los Strings Como todos los vectores la primer posición es la cero! En la reserva de memoria se debe considerar el \0. (20 pos = 19 char + \0) La ausencia del \0 al final de una cadena puede generar que se sobreescriban variables del programa y en el mejor de los casos un Segmentation Fault

13 #include int main(void) { struct persona { int legajo; char nombre[20]; char apellido[25] ; char genero; float altura; }; struct persona p; struct persona *q; strcpy(p.nombre, "Santiago"); strcpy(p.apellido, "Ciciliani"); p.genero = 'M'; p.altura = 1.75; q = (struct persona*)malloc(sizeof(struct persona)); strcpy(q->nombre, "Peter"); strcpy(q->apellido, "Capusoto"); q->genero = 'F'; q->altura = 1.60; printf("Los dos nombres son: %s y %s", p.nombre, q->nombre); free(q); } Structs – un ejemplo Puntero a la estructura (4bytes) Como es un puntero, le tengo que asignar un espacio de memoria a donde apuntar! Operador flechita (->) equivalente a poner: (*q).

14 Pasar como referencia void elevarAlCuadrado (int *x); #include int main(void) { int a = 2; elevarAlCuadrado (&a); printf("El valor del cuadrado de a es: %d\n", a); } void elevarAlCuadrado (int *x) { (*x) = (*x) * (*x); } No paso a, sino su dirección Trabajo con eso que está apuntado en la dirección x y no con x que tiene una dirección de memoria

15 Biblioteca estandar Contiene la macro assert (aserción), utilizada para detectar errores lógicos y otros tipos de fallos en la depuración de un programa. Conjunto de funciones para manipular números complejos (nuevo en C99). Contiene funciones para clasificar caracteres según sus tipos o para convertir entre mayúsculas y minúsculas independientemente del conjunto de caracteres (típicamente ASCII o alguna de sus extensiones). Para testar los códigos de error devueltos por las funciones de biblioteca. Para controlar entornos en coma flotante (nuevo en C99). Contiene la definición de constantes que especifican ciertas propiedades de la biblioteca de coma flotante, como la diferencia mínima entre dos números en coma flotante (_EPSOLON), el número máximo de dígitos de precisión (_DIG), o el rango de valores que se pueden representar (_MIN, _MAX). Para operaciones de conversión con precisión entre tipos enteros (nuevo en C99). Para utilizar los conjuntos de caracteres ISO 646 (nuevo en NA1). Contiene la definición de constantes que especifican ciertas propiedades de los tipos enteros, como rango de valores que se pueden representar (_MIN, _MAX). Para la función setlocale() y las constantes relacionadas. Se utiliza para seleccionar el entorno local apropiado (configuración regional). Contiene las funciones matemáticas comunes. Declara las macros setjmp y longjmp para proporcionar saltos de flujo de control de programa no locales. Para controlar algunas situaciones excepcionales como la división por cero. posibilita el acceso a una cantidad variable de argumentos pasados a una función. Para el tipo booleano (nuevo en C99). Para definir varios tipos enteros (nuevo en C99). Para definir varios tipos de macros de utilidad. Proporciona el núcleo de las capacidades de entrada/salida del lenguaje C (incluye la venerable función printf). Para realizar ciertas operaciones como conversión de tipos, generación de números pseudo-aleatorios, gestión de memoria dinámica, control de procesos, funciones de entorno, de señalización (??), de ordenación y búsqueda. Para manipulación de cadenas de caracteres. Contiene funcionalidades matemáticas de tipo genérico (type-generic) (nuevo en C99). Para tratamiento y conversión entre formatos de fecha y hora.


Descargar ppt "Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información Introducción a C Sistemas Operativos."

Presentaciones similares


Anuncios Google