Saltar al contenido principal
LibreTexts Español

6.1: Introducción

  • Page ID
    81877
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Hasta ahora no hemos hablado mucho de cadenas de caracteres, es decir, variables que contienen datos no numéricos como el nombre o la dirección de una persona. No hay ningún tipo de variable de cadena en C (a diferencia de Python). En C, las cadenas no son más que matrices de caracteres. Las matrices son una agrupación simple de variables similares en una secuencia, cada una con el mismo nombre y a la que se accede a través de un número de índice. Se comportan de manera similar a las matrices en la mayoría de los otros lenguajes (o listas en Python). Las matrices C pueden tener una, dos o más dimensiones. Aquí hay algunas declaraciones de ejemplo:

    float results[10];    // An array of 10 floats
    long int x[20];       // An array of 20 longs, or 80 bytes
    char y[10][15];       // A two-dimension array, 10 by 15 chars each, 150 bytes total
    

    Tenga en cuenta el uso de corchetes y el uso de múltiples conjuntos de corchetes para matrices de mayor dimensión 6. Además, las matrices C se cuentan a partir del índice 0 en lugar de 1 1. Por ejemplo, el primer ítem de resultados [] es results [0]. El último ítem es resultados [9]. No hay tal ítem aquí como resultados [10]. Eso constituiría un acceso ilegal. Puede preinicializar matrices listando valores dentro de llaves, cada uno separado por una coma:

    double a[5] = {1.0, 2.0, 4.7, -177.0, 6.3e4};

    Si dejas fuera el índice, obtienes tantos elementos como inicializas:

    short int b[] = {1, 5, 6, 7}; /* four elements */

    Si declaras más de lo que inicializas, el resto se establece en cero si la matriz es global o estática (pero no si es automática).

    short int c[10] = {1, 3, 20}; /* remaining 7 are set to 0 */

    Si se trata de cadenas de caracteres, podría ingresar los códigos ASCII para los caracteres, pero esto sería tedioso en la mayoría de los casos. C te permite especificar el carácter en comillas simples y hará la traducción:

    char m[20] = {‘m’, ‘y’, ‘ ’, ‘d’, ‘o’, ‘g’, 0};

    (La razón del 0 al final será evidente en un momento.) Aún más fácil es especificar la cadena entre comillas dobles:

    char n[20]={“Bill the cat”};

    Considera la cadena n [] anterior. Contiene 12 caracteres pero se declaró que tenía 20. ¿Por qué hacer esto? Bueno, es posible que necesites copiar alguna otra cadena en esta variable en un futuro. Al declarar un valor mayor, la variable puede contener una cadena más grande más adelante. En este punto tal vez se esté preguntando cómo funciona la biblioteca C “saber” para usar solo una porción del espacio asignado en un momento dado (en este caso, solo los primeros 12 caracteres). Esto es posible a través de una regla simple: Todas las cadenas deben ser nulas terminadas. Es decir, el carácter posterior al carácter final en uso debe ser nulo, numéricamente 0. En el caso de la inicialización directa de cadena de n [], el nulo se agrega automáticamente después del carácter final, t. En el caso de la inicialización carácter por carácter de m [], tuvimos que hacerlo manualmente. El nulo es sumamente importante. Las funciones que manipulan o imprimen cadenas buscan el nulo final para determinar cuándo se realiza su trabajo. Sin una terminación nula, las funciones simplemente se desplazarán a través de la memoria hasta que finalmente lleguen a un nulo, lo que puede causar violaciones del sistema e incluso bloqueos de aplicaciones o sistemas operativos. Tenga en cuenta que

    char my_pet[] = {“fido”};

    en realidad declara cinco caracteres, no cuatro (cuatro letras más el nulo terminante). Como C cuenta desde el índice 0, esta declaración es equivalente a:

    my_pet[0]= ‘f’;
    my_pet[1]= ‘i’;
    my_pet[2]= ‘d’;
    my_pet[3]= ‘o’;
    my_pet[4]= 0;

    El nulo final también puede escribirse como '\ 0'. Es importante tener en cuenta que sin la barra diagonal inversa, ¡esto tiene un significado completamente diferente! '\ 0' significa nulo, pero' 0 'significa el número 0.


    1. El motivo de esto será evidente cuando cubramos direcciones y punteros.

    This page titled 6.1: Introducción is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by James M. Fiore via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.