SlideShare una empresa de Scribd logo
1 de 57
Programación en C (III Parte)  05/06/2011 Realizado por Mariela Curiel Universidad Simón Bolívar Junio, 2011
Apuntadores Manejo de memoria dinámica. Listas  Línea de comandos del main() Entrada/Salida Contenido 05/06/2011 2
Funciones Apuntadores Manejo de memoria dinámica. Listas  Línea de comandos del Main Entrada/Salida Contenido 05/06/2011 3
Los apuntadores en el Lenguaje C, son variables que poseen la dirección de la ubicación en memoria de otras variables. Declaración de un apuntador: tipo de variable apuntada *nombre_apunt; int *pint ; double *pfloat ; char *letra , *codigo , *caracter ; Apuntadores
int x; /* se crea en memoriauna variable entera  */ int *p; /* se declara un apuntadorquecontendrá la dirección de una variable entera */ p = &x; /* al apuntador se le asigna la dirección de la variable entera (x) */ Apuntadores
Apuntadores int c, ...; int *p; c = 63; p = &c; 0 4 8 12 16 c: 63 p: 20 24 28 4
Apuntadores int c, ...; int *p; c = 63; 0 4 8 12 16 c: 63 p: 20 24 28
Apuntadores int c,…; int *p; c = 63; p = &c; *p = 40; 0 4 8 12 16 c: 40 p: 20 24 28 4
IMPORTANTE: Cuando se declara un apuntador no apunta a ningún lugar. Es necesario inicializarlo antes de usarlo.  int *p;    *p = 100; /* error */ El uso correcto es: int *p, x;    p = &x; // se inicializa el apuntador    *p = 100; // se está dando un valor a lo apuntado por p. Apuntadores
[object Object]
Para hallar el valor apuntado se utiliza el operador (*). Así, son equivalentes:y = x ;  y = *p; // tomando en cuenta la asignación de la lámina anterior. printf("%d" , x ) ; printf("%d" , *p) ; Apuntadores
Incremento de apuntadores int *dir; .... dir + 1; /* Ok */ dir += 10; /* incrementadirparaapuntar 10 elementos. masadelante */ Operaciones sobre Apuntadores
[object Object],p++; ,[object Object]
Un apuntador a entero o float sumará 4 bytes a la direcciónApuntadores
Comparación de apuntadores Sólo se podrán comparar apuntadores del mismo tipo. int t[10]; int *p; for (p=t; p < t+10;p++)       *p = 1; Operaciones sobre Apuntadores
Resta de apuntadores: la diferenciaproporciona el número de elementos del tipo en cuestión, situados entre las dos direcciones. intstrlen(char *s){      char *p=s;      while (*p != ‘’)        p++;      return p - s;   } Operaciones sobre Apuntadores
Asignaciones y el apuntador NULL int *p, *t, a[10]; p = a: t = p; p = NULL; Operaciones sobre Apuntadores
Apuntadoresgenéricos void ceros(void *dir, int n) { inti;   char *pch = dir;   for(i=0;i < n; i++, pch++) *pch = 0; } ... int t[0]; double z; ceros(t, 10*sizeof(int)); ceros(&z, sizeof(z)); Operaciones sobre Apuntadores
Apuntadores y Arreglos El nombre de un arreglo , para el compilador C , es un APUNTADOR inicializado con la dirección del primer elemento del arreglo.  float var,conjunto[]={8.0,7.0,6.0,5.0); float *pf; pf = conjunto; /* equivale a hacer pf = &conjunto[0]*/      var1 = *pf;      *pf = 25.1;
Recuperar un elemento de un arreglo usando apuntadores:  int *pa, a[10];  pa = a; /* equivale a pa = &a[0]*/ también .... x = *(pa + i) equivale a x = a[i]  Apuntadores y Arreglos
Un arreglo como apuntador: a[i] puede escribirse como *(a + i). i.e. &a[i] = a + i.  El apuntador lo podemos tratar como arreglo:  pa[i] en lugar de *(pa + i).  Apuntadores y Arreglos
[object Object],inta[10], *pa; ,[object Object],pa = a y pa++ ,[object Object],a = pa y a++ SON ILEGALES. Apuntadores y Arreglos
Apuntadores y Arreglos ASIGNACIONES ERRONEAS intconjunto[3], lista[] = {5,6,7}; int *apuntador ; apuntador = lista ; /* correcto */ conjunto = apuntador; /* ERROR */ lista = conjunto ; /* ERROR  */ apuntador = &conjunto /* ERROR no se puedeaplicar el operador “&”  aunaconstante */
[object Object]
char *car[5]; define un arreglo de 5 apuntadores a caracteres.
Los arreglos de apuntadorespuedeninicializarse de la misma forma que un arreglocomún: char *months = {``no month'', ``jan'', ``feb”, ...}; Arreglos de Apuntadores
Los apuntadores pueden servir para el manejo de estructuras, y su alojamiento dinámico.  Tienen además la propiedad de poder direccionar a los miembros de las mismas utilizando el operador (->) . Apuntadores a Estructuras
structconjunto { int a ; double b ; char c[5] ; } stconj ; stconj.a = 10 ; stconj.b = 1.15 ; stconj.c[0] = 'A' ; Con apuntadores:  structconjunto  *pconj ; pconj = (structconjunto *)malloc( sizeof( structconjunto )) ; pconj->a = 10 ; pconj->b = 1.15 ; pconj->c[0] = 'A' ;
Unaestructura, se puedepasar a unafuncióncomoargumento: structconjunto { int a ; 	double b ; 	char c[5] ; 	} datos; //declaración de la variable datos void funcion( structconjunto); //prototipo . . . funcion(datos); // llamada APUNTADORES COMO PARAMETROS DE FUNCIONES
Otra forma equivalenteesutilizar un apuntador a la estructura structconjunto { int a ;     double b ;     char c[5] ; } a; // declaración de la variable “a” void una_funcion( structconjunto*); //prototipo una_funcion(&a); //llamada APUNTADORES COMO PARAMETROS DE FUNCIONES
Podemos declarar funciones que devuelven apuntadores a un tipo de datos: char *funcion1(char * var1 ) ; double *funcion2(int i, double j, char *k ) ; struct item *funcion3( struct stock *puntst ) ; APUNTADORES COMO RESULTADO DE UNA FUNCION
El retorno de las mismas puede inicializar apuntadores del mismo tipo al que se devuelve  o de un tipo distinto. void *malloc(int tamaño) ; 		p = (double *)malloc( 64 ) ; APUNTADORES COMO RESULTADO DE UNA FUNCION
Cuando  en el lenguaje C se pasan argumentos a las funciones, el pasaje de parámetros es por valor.  Los apuntadores se utilizan para realizar el pasaje de parámetros por referencia. int a,b; swap(a, b) /* NO FUNCIONA */.  Apuntadores y Funciones
[object Object],  swap(&a, &b) /* Llamada */ 			. . .   void swap(int *px, int *py){  int temp;     temp = *px /* lo apuntadopor p*/      *px = *py; 	  *py = temp;  } Apuntadores y Funciones
Prototipo  void una_funcion( structconjunto *p); ….. structconjunto { int a ;     double b ;     char c[5] ; } a; una_funcion(&a); Declaración de la variable a Llamada con la dirección de  la variable APUNTADORES COMO PARAMETROS DE FUNCIONES
Apuntadores y Funciones Cuando un arreglo se pasa a unafunción comoparámetrolo querealmente se estápasandoeslaubicación en memoria de su primer elemento: strlen(s) equivalestrlen(&s[0])  La declaración de la funciónes:  intstrlen(char s[]) ; Y unadeclaraciónequivalentees :  intstrlen(char *s); porque char s[] es similar a char *s. llamada
strlen() esunafunción de la libreríaestándarqueretorna la longitud de un string: intstrlen(char *s) {       char *p = s;      while (*p != `’); 	    p++;      return p-s; } llamada:  char nombre[10]; strlen(nombre); Apuntadores y Funciones
[object Object]
Los elementos del arreglo se almacenanporfilas.
Cuando se pasa un arreglo de dos dimensiones a unafunción, se pasa el número de columnas, -- el número de filasesirrelevante. Arreglos Multidimensionales y Apuntadores
Considere la siguientematriz: int a[5][35] Para pasarlacomoargumento a unafunción, ésta se declaracomo:  f(int a[5][35]) {.....} f(int a[][35]) {.....}  o incluso:  f(int (*a)[35]) {.....} Arreglos Multidimensionales y Apuntadores
int (*a)[35]; declara un apuntador a un arreglo de 35 enteros.  int *a[35]; declara un arreglo de 35 apuntadores a enteros.  Arreglos Multidimensionales y Apuntadores
char *name[10];  char Aname[10][20];  Las instrucciones name[3][4] y Aname[3][4] son correctas en C.  Sin embargo ,[object Object]
nametiene 10 elementosque son apuntadores no inicilizados.Laventajaesque los vectores de cadafilapueden ser de longitudes diferentes.ArreglosMultidimensionales y Apuntadores
Memoria Dinámica y estructuras de datos dinámicas 05/06/2011
La Funcciónmallocse usaparaobtenerunaporcióncontigua de memoria.  void *malloc(size_tnumber_of_bytes)  Retorna un  apuntador del tipovoid *.Si la memoria no se puedeasignarretorna NULL El tipo del argumento(size_t)estadefinido en  stdlib.h y es un tipounsigned.  Memoria Dinámica
char *cp; cp = malloc(100); La instrucción anterior solicita al sistema operativo  100 bytes consecutivos y asigna la dirección de comienzo de este bloque a al apuntador cp.  Memoria Dinámica
Es común usar  la función sizeof() para especificar el número de bytes de un determinado tipo o estructura de datos.  int *ip; ip = (int *) malloc(100*sizeof(int)); Memoria Dinámica
La función sizeof puede usarse para encontrar el tamaño de cualquier tipo de datos, variable o estructura.  int i; struct COORD {float x,y,z}; typedef struct COORD PT; sizeof(int), sizeof(i), sizeof(struct COORD) y sizeof(PT) son todos válidos Memoria Dinámica
ip = (int *)malloc(100*sizeof(int)); Aquí haremos uso de la relación entre apuntadores y arreglos y trataremos la memoria reservada como un arreglo. En lugar de  *ip = 100, podemos hacer: ip[0] = 100;  o for(i=0;i<100;++i) 		   printf("%d",ip[i]);
Cuando se termina de usar una porción de memoria se debe liberar usando la función  free().  free() toma un apuntador como argumento y libera la memoria direccionada por el  apuntador.  Memoria Dinámica
Queremos almacenar 3 enteros, en una estructura de datos dinámica (lista).  Mostraremos cómo se hace de una forma sencilla: 1. Primero crearemos tres variables de un determinado tipo (struct list). Dichas variables contendrán el valor entero a almacenar y un apuntador inicializado en NULL. 2. Luego colocaremos el apuntador de una variable a “apuntar” a la siguiente.  Creación de Estructuras de datos dinámicas 05/06/2011
Graficamente.  Paso 1 struct list{ int data; struct list *next; }; struct list a, b, c; a.data = 1; b.data = 2; c.data = 3; a.next = b.next = c.next = NULL; 1 NULL a b NULL 2 3 c NULL Estructuras autoreferenciadas
a b c 1 3 2 NULL a.next = &b; b.next = &c; Paso 2 a.next -> data  es 2 a.next -> next -> data es 3 Estructuras autoreferenciadas
Ahora, cada elemento de la lista lo crearemos dinámicamente según se necesite.  Utilizaremos typedef, para crear tipos de datos que permiten una programación más ellegante. Esta vez, cada elemento de la lista almacenará un carácter y el apuntador al próximo elemento de la lista.  Otro Ejemplo 05/06/2011
// Definición de tipos. Archivo list.h  #define NULL 0 typedef char DATA; struct linked_list{ DATA d; struct linked_list *next; }; typedef struct linked_list ELEMENT; typedef ELEMENT *LINK; Estructurasautoreferenciadas
El programa de la siguiente lámina recibe como parámetro un arreglo de caracteres y los coloca en una lista.  Las variables head y tail apuntan en todo momento a la cabeza y cola de la lista respectivamente.  Al comienzo apuntan a NULL. Estructurasautoreferenciadas 05/06/2011

Más contenido relacionado

La actualidad más candente

Apuntadores y direccionamiento
Apuntadores y direccionamientoApuntadores y direccionamiento
Apuntadores y direccionamientoSergio Ramos
 
Algoritmos y lenjuage de programacion
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacionYsaac Ruiz
 
Luis hernandez 22310621
Luis hernandez   22310621Luis hernandez   22310621
Luis hernandez 22310621Luis Miguel
 
Trabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaTrabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaJhosse Ant Siilva
 
Lenguaje C para Administradores de Red - Script II Punteros
Lenguaje C para Administradores de Red - Script II PunterosLenguaje C para Administradores de Red - Script II Punteros
Lenguaje C para Administradores de Red - Script II Punterossirfids
 
Lenguajec 1
Lenguajec 1Lenguajec 1
Lenguajec 1joeshego
 
INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++Idalia Tristan
 
Apuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje cApuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje cZalimanunezc
 
Clase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacionClase 11- fundamentos de la programacion
Clase 11- fundamentos de la programaciondiego MC
 
Introducción a los Punteros en el lenguaje C
Introducción a los Punteros en el lenguaje CIntroducción a los Punteros en el lenguaje C
Introducción a los Punteros en el lenguaje CDiego Santimateo
 
Estructuras básicas para C++
Estructuras básicas para C++Estructuras básicas para C++
Estructuras básicas para C++Bryangio2002
 
Operadores y expresiones
Operadores y expresionesOperadores y expresiones
Operadores y expresionesJorge Ñauñay
 
Librerias en-lenguaje-c
Librerias en-lenguaje-cLibrerias en-lenguaje-c
Librerias en-lenguaje-cKevin2811
 
Operaciones Basicas C++
Operaciones Basicas C++Operaciones Basicas C++
Operaciones Basicas C++yesid19
 

La actualidad más candente (20)

Apuntadores y direccionamiento
Apuntadores y direccionamientoApuntadores y direccionamiento
Apuntadores y direccionamiento
 
Funciones en Lenguaje C
Funciones en Lenguaje CFunciones en Lenguaje C
Funciones en Lenguaje C
 
Algoritmos y lenjuage de programacion
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacion
 
Luis hernandez 22310621
Luis hernandez   22310621Luis hernandez   22310621
Luis hernandez 22310621
 
Trabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaTrabajo programacion 1 jose silva
Trabajo programacion 1 jose silva
 
Lenguaje C para Administradores de Red - Script II Punteros
Lenguaje C para Administradores de Red - Script II PunterosLenguaje C para Administradores de Red - Script II Punteros
Lenguaje C para Administradores de Red - Script II Punteros
 
Lenguajec 1
Lenguajec 1Lenguajec 1
Lenguajec 1
 
Solucion ejercicios punteros cadenas-vectores
Solucion ejercicios punteros cadenas-vectoresSolucion ejercicios punteros cadenas-vectores
Solucion ejercicios punteros cadenas-vectores
 
Funciones en c++
Funciones en c++Funciones en c++
Funciones en c++
 
INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++
 
Apuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje cApuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje c
 
Clase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacionClase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacion
 
Cod intermedio
Cod intermedioCod intermedio
Cod intermedio
 
Introducción a los Punteros en el lenguaje C
Introducción a los Punteros en el lenguaje CIntroducción a los Punteros en el lenguaje C
Introducción a los Punteros en el lenguaje C
 
Estructuras básicas para C++
Estructuras básicas para C++Estructuras básicas para C++
Estructuras básicas para C++
 
Funcion printf
Funcion printfFuncion printf
Funcion printf
 
OPERADORES PARA C++
OPERADORES PARA C++OPERADORES PARA C++
OPERADORES PARA C++
 
Operadores y expresiones
Operadores y expresionesOperadores y expresiones
Operadores y expresiones
 
Librerias en-lenguaje-c
Librerias en-lenguaje-cLibrerias en-lenguaje-c
Librerias en-lenguaje-c
 
Operaciones Basicas C++
Operaciones Basicas C++Operaciones Basicas C++
Operaciones Basicas C++
 

Destacado (6)

Tema 7: Temporizadores y Relojes.
Tema 7: Temporizadores y Relojes.Tema 7: Temporizadores y Relojes.
Tema 7: Temporizadores y Relojes.
 
Adc y usart pic16 f887
Adc y usart pic16 f887Adc y usart pic16 f887
Adc y usart pic16 f887
 
Interrupciones y Temporizadores
Interrupciones y TemporizadoresInterrupciones y Temporizadores
Interrupciones y Temporizadores
 
Módulo ADC del PIC16F887
Módulo ADC del PIC16F887Módulo ADC del PIC16F887
Módulo ADC del PIC16F887
 
Arquitectura Microcontrolador PIC16F887
Arquitectura Microcontrolador PIC16F887Arquitectura Microcontrolador PIC16F887
Arquitectura Microcontrolador PIC16F887
 
UML: CASOS DE USO
UML: CASOS DE USOUML: CASOS DE USO
UML: CASOS DE USO
 

Similar a Programación en c (iii parte)

Implementacion de punteros
Implementacion de punterosImplementacion de punteros
Implementacion de punterosKareliaRivas
 
PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++die_dex
 
Lenguajec diapositivas
Lenguajec diapositivasLenguajec diapositivas
Lenguajec diapositivastacubomx
 
Estructura de Datos
Estructura de DatosEstructura de Datos
Estructura de Datosluna_72
 
ED 01 tipos_datos_ejercicios
ED 01 tipos_datos_ejerciciosED 01 tipos_datos_ejercicios
ED 01 tipos_datos_ejerciciosA J
 
Guia De Practica 3
Guia De Practica 3Guia De Practica 3
Guia De Practica 3louis
 
Tema 8 www.fresymetal.com
Tema 8 www.fresymetal.comTema 8 www.fresymetal.com
Tema 8 www.fresymetal.comFresyMetal
 
Lenguaje de programación c
Lenguaje de programación cLenguaje de programación c
Lenguaje de programación cvictdiazm
 
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4hassanbadredun
 
Lenguaje c diapositivas
Lenguaje c diapositivasLenguaje c diapositivas
Lenguaje c diapositivasstarduslex
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivasstarduslex
 
Computacion punteros
Computacion punterosComputacion punteros
Computacion punterosManuel
 
Arreglos
ArreglosArreglos
ArreglosAnt Jfr
 

Similar a Programación en c (iii parte) (20)

Implementacion de punteros
Implementacion de punterosImplementacion de punteros
Implementacion de punteros
 
PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++
 
Apuntadores
Apuntadores Apuntadores
Apuntadores
 
1 Tipos De Datos Ejercicios
1 Tipos De Datos Ejercicios1 Tipos De Datos Ejercicios
1 Tipos De Datos Ejercicios
 
Lenguajec diapositivas
Lenguajec diapositivasLenguajec diapositivas
Lenguajec diapositivas
 
Tipos de datos en C
Tipos de datos en CTipos de datos en C
Tipos de datos en C
 
Estructura de Datos
Estructura de DatosEstructura de Datos
Estructura de Datos
 
ED 01 tipos_datos_ejercicios
ED 01 tipos_datos_ejerciciosED 01 tipos_datos_ejercicios
ED 01 tipos_datos_ejercicios
 
Arreglos
ArreglosArreglos
Arreglos
 
Guia De Practica 3
Guia De Practica 3Guia De Practica 3
Guia De Practica 3
 
nodo
nodonodo
nodo
 
Tema 8 www.fresymetal.com
Tema 8 www.fresymetal.comTema 8 www.fresymetal.com
Tema 8 www.fresymetal.com
 
Lenguaje de programación c
Lenguaje de programación cLenguaje de programación c
Lenguaje de programación c
 
C sharp intro0
C sharp intro0C sharp intro0
C sharp intro0
 
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
 
Punteros2
Punteros2Punteros2
Punteros2
 
Lenguaje c diapositivas
Lenguaje c diapositivasLenguaje c diapositivas
Lenguaje c diapositivas
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivas
 
Computacion punteros
Computacion punterosComputacion punteros
Computacion punteros
 
Arreglos
ArreglosArreglos
Arreglos
 

Último

Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSYadi Campos
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioELIASAURELIOCHAVEZCA1
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxzulyvero07
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaDecaunlz
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdfenelcielosiempre
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAJAVIER SOLIS NOYOLA
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfPaolaRopero2
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAEl Fortí
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 

Último (20)

Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptxACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
ACUERDO MINISTERIAL 078-ORGANISMOS ESCOLARES..pptx
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdf
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 

Programación en c (iii parte)

  • 1. Programación en C (III Parte) 05/06/2011 Realizado por Mariela Curiel Universidad Simón Bolívar Junio, 2011
  • 2. Apuntadores Manejo de memoria dinámica. Listas Línea de comandos del main() Entrada/Salida Contenido 05/06/2011 2
  • 3. Funciones Apuntadores Manejo de memoria dinámica. Listas Línea de comandos del Main Entrada/Salida Contenido 05/06/2011 3
  • 4. Los apuntadores en el Lenguaje C, son variables que poseen la dirección de la ubicación en memoria de otras variables. Declaración de un apuntador: tipo de variable apuntada *nombre_apunt; int *pint ; double *pfloat ; char *letra , *codigo , *caracter ; Apuntadores
  • 5. int x; /* se crea en memoriauna variable entera */ int *p; /* se declara un apuntadorquecontendrá la dirección de una variable entera */ p = &x; /* al apuntador se le asigna la dirección de la variable entera (x) */ Apuntadores
  • 6. Apuntadores int c, ...; int *p; c = 63; p = &c; 0 4 8 12 16 c: 63 p: 20 24 28 4
  • 7. Apuntadores int c, ...; int *p; c = 63; 0 4 8 12 16 c: 63 p: 20 24 28
  • 8. Apuntadores int c,…; int *p; c = 63; p = &c; *p = 40; 0 4 8 12 16 c: 40 p: 20 24 28 4
  • 9. IMPORTANTE: Cuando se declara un apuntador no apunta a ningún lugar. Es necesario inicializarlo antes de usarlo. int *p; *p = 100; /* error */ El uso correcto es: int *p, x; p = &x; // se inicializa el apuntador *p = 100; // se está dando un valor a lo apuntado por p. Apuntadores
  • 10.
  • 11. Para hallar el valor apuntado se utiliza el operador (*). Así, son equivalentes:y = x ; y = *p; // tomando en cuenta la asignación de la lámina anterior. printf("%d" , x ) ; printf("%d" , *p) ; Apuntadores
  • 12. Incremento de apuntadores int *dir; .... dir + 1; /* Ok */ dir += 10; /* incrementadirparaapuntar 10 elementos. masadelante */ Operaciones sobre Apuntadores
  • 13.
  • 14. Un apuntador a entero o float sumará 4 bytes a la direcciónApuntadores
  • 15. Comparación de apuntadores Sólo se podrán comparar apuntadores del mismo tipo. int t[10]; int *p; for (p=t; p < t+10;p++) *p = 1; Operaciones sobre Apuntadores
  • 16. Resta de apuntadores: la diferenciaproporciona el número de elementos del tipo en cuestión, situados entre las dos direcciones. intstrlen(char *s){ char *p=s; while (*p != ‘’) p++; return p - s; } Operaciones sobre Apuntadores
  • 17. Asignaciones y el apuntador NULL int *p, *t, a[10]; p = a: t = p; p = NULL; Operaciones sobre Apuntadores
  • 18. Apuntadoresgenéricos void ceros(void *dir, int n) { inti; char *pch = dir; for(i=0;i < n; i++, pch++) *pch = 0; } ... int t[0]; double z; ceros(t, 10*sizeof(int)); ceros(&z, sizeof(z)); Operaciones sobre Apuntadores
  • 19. Apuntadores y Arreglos El nombre de un arreglo , para el compilador C , es un APUNTADOR inicializado con la dirección del primer elemento del arreglo. float var,conjunto[]={8.0,7.0,6.0,5.0); float *pf; pf = conjunto; /* equivale a hacer pf = &conjunto[0]*/ var1 = *pf; *pf = 25.1;
  • 20. Recuperar un elemento de un arreglo usando apuntadores: int *pa, a[10]; pa = a; /* equivale a pa = &a[0]*/ también .... x = *(pa + i) equivale a x = a[i] Apuntadores y Arreglos
  • 21. Un arreglo como apuntador: a[i] puede escribirse como *(a + i). i.e. &a[i] = a + i. El apuntador lo podemos tratar como arreglo: pa[i] en lugar de *(pa + i). Apuntadores y Arreglos
  • 22.
  • 23. Apuntadores y Arreglos ASIGNACIONES ERRONEAS intconjunto[3], lista[] = {5,6,7}; int *apuntador ; apuntador = lista ; /* correcto */ conjunto = apuntador; /* ERROR */ lista = conjunto ; /* ERROR */ apuntador = &conjunto /* ERROR no se puedeaplicar el operador “&” aunaconstante */
  • 24.
  • 25. char *car[5]; define un arreglo de 5 apuntadores a caracteres.
  • 26. Los arreglos de apuntadorespuedeninicializarse de la misma forma que un arreglocomún: char *months = {``no month'', ``jan'', ``feb”, ...}; Arreglos de Apuntadores
  • 27. Los apuntadores pueden servir para el manejo de estructuras, y su alojamiento dinámico. Tienen además la propiedad de poder direccionar a los miembros de las mismas utilizando el operador (->) . Apuntadores a Estructuras
  • 28. structconjunto { int a ; double b ; char c[5] ; } stconj ; stconj.a = 10 ; stconj.b = 1.15 ; stconj.c[0] = 'A' ; Con apuntadores: structconjunto *pconj ; pconj = (structconjunto *)malloc( sizeof( structconjunto )) ; pconj->a = 10 ; pconj->b = 1.15 ; pconj->c[0] = 'A' ;
  • 29. Unaestructura, se puedepasar a unafuncióncomoargumento: structconjunto { int a ; double b ; char c[5] ; } datos; //declaración de la variable datos void funcion( structconjunto); //prototipo . . . funcion(datos); // llamada APUNTADORES COMO PARAMETROS DE FUNCIONES
  • 30. Otra forma equivalenteesutilizar un apuntador a la estructura structconjunto { int a ; double b ; char c[5] ; } a; // declaración de la variable “a” void una_funcion( structconjunto*); //prototipo una_funcion(&a); //llamada APUNTADORES COMO PARAMETROS DE FUNCIONES
  • 31. Podemos declarar funciones que devuelven apuntadores a un tipo de datos: char *funcion1(char * var1 ) ; double *funcion2(int i, double j, char *k ) ; struct item *funcion3( struct stock *puntst ) ; APUNTADORES COMO RESULTADO DE UNA FUNCION
  • 32. El retorno de las mismas puede inicializar apuntadores del mismo tipo al que se devuelve o de un tipo distinto. void *malloc(int tamaño) ; p = (double *)malloc( 64 ) ; APUNTADORES COMO RESULTADO DE UNA FUNCION
  • 33. Cuando en el lenguaje C se pasan argumentos a las funciones, el pasaje de parámetros es por valor. Los apuntadores se utilizan para realizar el pasaje de parámetros por referencia. int a,b; swap(a, b) /* NO FUNCIONA */. Apuntadores y Funciones
  • 34.
  • 35. Prototipo void una_funcion( structconjunto *p); ….. structconjunto { int a ; double b ; char c[5] ; } a; una_funcion(&a); Declaración de la variable a Llamada con la dirección de la variable APUNTADORES COMO PARAMETROS DE FUNCIONES
  • 36. Apuntadores y Funciones Cuando un arreglo se pasa a unafunción comoparámetrolo querealmente se estápasandoeslaubicación en memoria de su primer elemento: strlen(s) equivalestrlen(&s[0]) La declaración de la funciónes: intstrlen(char s[]) ; Y unadeclaraciónequivalentees : intstrlen(char *s); porque char s[] es similar a char *s. llamada
  • 37. strlen() esunafunción de la libreríaestándarqueretorna la longitud de un string: intstrlen(char *s) { char *p = s; while (*p != `’); p++; return p-s; } llamada: char nombre[10]; strlen(nombre); Apuntadores y Funciones
  • 38.
  • 39. Los elementos del arreglo se almacenanporfilas.
  • 40. Cuando se pasa un arreglo de dos dimensiones a unafunción, se pasa el número de columnas, -- el número de filasesirrelevante. Arreglos Multidimensionales y Apuntadores
  • 41. Considere la siguientematriz: int a[5][35] Para pasarlacomoargumento a unafunción, ésta se declaracomo: f(int a[5][35]) {.....} f(int a[][35]) {.....} o incluso: f(int (*a)[35]) {.....} Arreglos Multidimensionales y Apuntadores
  • 42. int (*a)[35]; declara un apuntador a un arreglo de 35 enteros. int *a[35]; declara un arreglo de 35 apuntadores a enteros. Arreglos Multidimensionales y Apuntadores
  • 43.
  • 44. nametiene 10 elementosque son apuntadores no inicilizados.Laventajaesque los vectores de cadafilapueden ser de longitudes diferentes.ArreglosMultidimensionales y Apuntadores
  • 45. Memoria Dinámica y estructuras de datos dinámicas 05/06/2011
  • 46. La Funcciónmallocse usaparaobtenerunaporcióncontigua de memoria. void *malloc(size_tnumber_of_bytes) Retorna un apuntador del tipovoid *.Si la memoria no se puedeasignarretorna NULL El tipo del argumento(size_t)estadefinido en stdlib.h y es un tipounsigned. Memoria Dinámica
  • 47. char *cp; cp = malloc(100); La instrucción anterior solicita al sistema operativo 100 bytes consecutivos y asigna la dirección de comienzo de este bloque a al apuntador cp. Memoria Dinámica
  • 48. Es común usar la función sizeof() para especificar el número de bytes de un determinado tipo o estructura de datos. int *ip; ip = (int *) malloc(100*sizeof(int)); Memoria Dinámica
  • 49. La función sizeof puede usarse para encontrar el tamaño de cualquier tipo de datos, variable o estructura. int i; struct COORD {float x,y,z}; typedef struct COORD PT; sizeof(int), sizeof(i), sizeof(struct COORD) y sizeof(PT) son todos válidos Memoria Dinámica
  • 50. ip = (int *)malloc(100*sizeof(int)); Aquí haremos uso de la relación entre apuntadores y arreglos y trataremos la memoria reservada como un arreglo. En lugar de *ip = 100, podemos hacer: ip[0] = 100; o for(i=0;i<100;++i) printf("%d",ip[i]);
  • 51. Cuando se termina de usar una porción de memoria se debe liberar usando la función free(). free() toma un apuntador como argumento y libera la memoria direccionada por el apuntador. Memoria Dinámica
  • 52. Queremos almacenar 3 enteros, en una estructura de datos dinámica (lista). Mostraremos cómo se hace de una forma sencilla: 1. Primero crearemos tres variables de un determinado tipo (struct list). Dichas variables contendrán el valor entero a almacenar y un apuntador inicializado en NULL. 2. Luego colocaremos el apuntador de una variable a “apuntar” a la siguiente. Creación de Estructuras de datos dinámicas 05/06/2011
  • 53. Graficamente. Paso 1 struct list{ int data; struct list *next; }; struct list a, b, c; a.data = 1; b.data = 2; c.data = 3; a.next = b.next = c.next = NULL; 1 NULL a b NULL 2 3 c NULL Estructuras autoreferenciadas
  • 54. a b c 1 3 2 NULL a.next = &b; b.next = &c; Paso 2 a.next -> data es 2 a.next -> next -> data es 3 Estructuras autoreferenciadas
  • 55. Ahora, cada elemento de la lista lo crearemos dinámicamente según se necesite. Utilizaremos typedef, para crear tipos de datos que permiten una programación más ellegante. Esta vez, cada elemento de la lista almacenará un carácter y el apuntador al próximo elemento de la lista. Otro Ejemplo 05/06/2011
  • 56. // Definición de tipos. Archivo list.h #define NULL 0 typedef char DATA; struct linked_list{ DATA d; struct linked_list *next; }; typedef struct linked_list ELEMENT; typedef ELEMENT *LINK; Estructurasautoreferenciadas
  • 57. El programa de la siguiente lámina recibe como parámetro un arreglo de caracteres y los coloca en una lista. Las variables head y tail apuntan en todo momento a la cabeza y cola de la lista respectivamente. Al comienzo apuntan a NULL. Estructurasautoreferenciadas 05/06/2011
  • 58. #include “list.h” LINK s_to_l (char s[]) { LINK head = NULL, tail=NULL; int i; if (s[0] != ‘’) { head = (LINK) malloc(sizeof(ELEMENT)); head -> d = s[0]; tail = head; for (i = 1; s[i] != ‘’, ++i) { tail ->next = (LINK) malloc(sizeof(ELEMENT)); tail = tail->next; tail -> d = s[i]; } tail ->next = NULL; return(head); } }
  • 59. A head ? tail Se recibe como parámetro El string “AB” #include “list.h” LINK s_to_l (char s[]) { LINK head = NULL, tail=NULL; int i; if (s[0] != ‘’) { head = (LINK) malloc(sizeof(ELEMENT)); head -> d = s[0]; tail = head; for (i = 1; s[i] != ‘’, ++i) { tail ->next = (LINK) malloc(sizeof(ELEMENT)); tail = tail->next; tail -> d = s[i]; } tail ->next = NULL; return(head); } }
  • 60. head A ? tail head A ? B tail LINK head = NULL, tail=NULL; inti; if (s[0] != ‘’) { head = (LINK) malloc(sizeof(ELEMENT)); head -> d = s[0]; tail = head; for (i = 1; s[i] != ‘’, ++i) { tail ->next = (LINK) malloc(sizeof(ELEMENT)); tail = tail->next; tail -> d = s[i]; } tail ->next = NULL; return(head); } }
  • 61. tail head A NULL B LINK head = NULL, tail=NULL; int i; if (s[0] != ‘’) { head = (LINK) malloc(sizeof(ELEMENT)); head -> d = s[0]; tail = head; for (i = 1; s[i] != ‘’, ++i) { tail ->next = (LINK) malloc(sizeof(ELEMENT)); tail = tail->next; tail -> d = s[i]; } tail ->next = NULL; return(head); } }
  • 62.
  • 63. argv es un arreglo de strings. Cada posición del arreglo contiene un argumento. Argumentos del Main
  • 64. Línea de Comandos #include<stdio.h> main (int argc, char **argv) { /* programa que imprime los argumentos de la línea de comandos */ int i; printf(``argc = %d'',argc); for (i=0;i<argc;++i) printf(``argv[%d]:%s'',i,argv[i]); }
  • 65. Si se invoca el programa (argum) con los siguientesargumentos: argum f1 “f2” f3 4 stop! La salidaserá: argc = 6 argv[0] = argum argv[1] = f1 argv[2] = f2 argv[3] = f3 argv[4] = 4 argv[5] = stop! Los caracteres “” se ignoran. Línea de Comandos
  • 66. Brian Kernighan y Dennis Ritchie. El Lenguaje de Programación C. Prentice Hall. http://www.its.strath.ac.uk/cources/c Bibliografía 05/06/2011 58