Este programa está limitado al tamaño de la memoria de pila (ej: 8 MiB en Linux). Nótese que se pasa por parámetro la función compare() sin los paréntesis en la línea 20. Si se usaran los paréntesis sería una invocación de función y sería reemplazado por su valor de retorno. Obtener código fuente.
Versión 2: arreglo en memoria dinámica
]]>
Esta versión usa memoria dinámica y por tanto, puede cargar una cantidad mucho mayor de datos a RAM. En clase corrió con éxito con un archivo de 278 MB. Esta versión crea un puntero a función compare llamado function_pointer. Esto no es necesario, sólo es para ilustrar la sintaxis de los punteros a funciones en C. Obtener código fuente.
Variables en el segmento de datos
Las variables globales y variables estáticas son almacenadas en el segmento de datos. Este se crea en tiempo de compilación, y es copiado idéntico del ejecutable al segmento de memoria mientras el programa se carga.
Muestra como se declaran, acceden, destruyen y pasan por parámetro diferentes tipos de arreglos en C. Obtener código fuente.
Cadenas de caracteres de C
También llamadas cadenas de caracteres terminadas en nulo (null-terminated strings). Son simplemente arreglos (de caracteres) que tienen un elemento más ('\0') para indicar dónde termina la cadena.
Error común: creer que un char* es un objeto string
Un char* str no es un arreglo de caracteres, es sólo un puntero, una variable entera. Para que tenga memoria donde se pueda escribir un texto, debe crearse un arreglo con cualquiera de las formas vistas en la sección anterior. El siguiente programa debería fallar al ejecutarse.
]]>
Escribir en un puntero no inicializado provoca un comportamiento impredecible del programa en tiempo de ejecución. Obtener código fuente.
Leer palabras con scanf
Se puede usar scanf() para leer cadenas de caracteres, siempre y cuando se indique la capacidad del arreglo (menos 1 para guardar el fin de cadena):
Puede usarse la función fgets(). El encabezado string.h tiene funciones comunes para el manejo de cadenas de caracteres. Este programa muestra cómo se puede implementar una función strlen() con índices, y una función que cambia el string a mayúsculas usando aritmética de punteros.
Diferentes símbolos pueden tener el mismo identificador y no colisionar gracias a los espacios de nombres. Obtener código fuente.
Clases: Fraction
]]>
Primera versión de la clase Fraction, sin sobrecarga de operadores. Obtener código fuente.
]]>
Posible traducción de la clase Fraction a C (incompleto). Para ver una traducción completa, puede verse los ejemplos del semestre anterior. Obtener código fuente.
Calculadora fraccional
]]>
Función main() que instancia el objeto que representa la aplicación. Obtener código fuente.
]]>
Interfaz de la clase que implementa la calculadora fraccional estándar. Obtener código fuente.