Tutorial de Lenguaje C                                                                                               Dr. Roberto Gómez


APUNTADORES Y ARREGLOS

Ejemplo:

prog35.c Ejemplo relacion apuntadores y arreglos

             #include <stdlib.h>
             #include <stdio.h>
             int main()
             {
                        int tabla[10],i,x,*pt,*ptr;

                        pt = &tabla[0];
                        x = *pt;

                        for (i=0; i <10; i++)
                                *(pt+i) = rand() % 100;
                        ptr = tabla;

                        for (i=0; i <10; i++)
                                printf(''%d \n'',*(ptr+i),tabla[i]);
               }
 


Arreglos de apuntadores
 

                                                    char * mensaje[4] = {''Hola'',''Adios'',''Bye'',''Salut''}


prog36.c Inicialización de arreglos de apuntadores

              #include <stdlib.h>
             
#include <stdio.h>

              int main()
              {
                      int x;    
                      char * mes[] = {
                                      ''mes ilegal'',

                                      ''enero'',
                                     ''febrero'',
                                     ''marzo'',
                                     ''abril'',
                                     ''mayo'',
                                     ''junio'',
                                     ''julio'',
                                     ''agosto'',
                                     ''septiembre'',
                                     ''octubre'',
                                     ''noviembre'',
                                     ''diciembre'',
                         };

                        x = rand() % 12;
                        printf(''El mes %d corresponde a %s \n'',x,mes[x]);
}
 

Detalles inicialización arreglos caracteres

A diferencia de un apuntador, un arreglo inicializado por un string puede ser modificado. Los caracteres individuales pueden ser cambiados después.


prog37.c Ejemplo inicialización arreglos caracteres


            #include <stdio.h>
            int main()
            {

                        char *esp[10] = {
                                        ''uno'',
                                        ''dos'',
                                        ''tres''
                        };

                        char frances[5][10] = {
                                        ''un'',
                                        ''deux'',
                                        ''trois''
                        };

                        printf("Elemen: 123456789\n");
                        for (i=0; i<3; i++)
                             printf("Esp[%d]: %s\n",i,esp[i]);
                        for (i=0; i<3; i++)
                             printf("Fra[%d]: %s\n",i,esp[i]);

                        printf("\nEsp: Elemento 3 de la entrada 2  %c \n",esp[2][3]);
                             printf("Fra: Elemento 4 de la entrada 3  %c \n",frances[3][4]);
                             printf("Esp: Elemento 7 de la entrada 2  %c \n",esp[2][7]);
                             frances[3][4]='A';
                             printf("Fra: Elemento 4 de la entrada 3  %c \n",frances[3][4]);
                             esp[2][3]='A'; /* Segmentation fault (core dumped) */
                             printf("Elemento 3 entrada 2 esp: %c \n",esp[2][3]);

             }
 

Apuntadores y arreglos multidimensionales

                                    int a[10][10];
                                    int *b[10];           1. ocupa más espacio, suponiendo que cada uno apunta a un arreglo de 10 elementos, el tamaño será de 10 apuntadores más 100 elementos

          2. se debe de crear el espacio de los arreglos antes de asignarlos

          1. el acceso se hace más rápido, una inderección es más rapida que el hacer una multiplicación seguida de una suma

          2. el tamaño de los arreglos apuntados por cada una de las diez  localidades pueden ser diferentes
 

Diferentes formas de declarar a[i][j]

Cuando se ve la referencia a un arreglo de dos dimensiones, a[i][j] , no se puede deducir inmendiatamente como fue declarado a :

                                                    int a[10][20];                                                     int *a[10];                                                     int **a;                                                     int (* a)[20];                                                     tab[i][j] * ( *(tab + i) + j)
 

MENÚ PRINCIPAL