Estoy practicando punteros y que desee sustituir operaciones de puntero en lugar de las matrices para recorrer los elementos de la matriz. He leído numerosos artículos y no puede entender este concepto. Puede alguien explicar?

Aquí hice una matriz 2D y reiterado a través de ella usando un basic for anidados en bucle, pero desea usar punteros;

int test[3][2] = {1,4,2,5,2,8};

for (int i = 0 ; i < 3; i++) {

    for (int j = 0; j < 2; j++) {

        printf("%d\n", test[i][j]);
    }
}
  • Hacerlo en varios pasos. Escribir código para iterar a través de una 1-D de la matriz y hacer que funcione correctamente. Copiar dentro de una función y conseguir que funcione en un 1-D de la matriz correctamente. Ahí estás – casi ha hecho. Recorrer en una dimensión y llamar a la función de cada elemento (es decir. cada 1-D de la matriz:), que se encuentra.
  • printf(«%d\n», *(*(test+i) + j));
InformationsquelleAutor ryan | 2014-09-30

4 Comentarios

  1. 7
    int test[3][2] = {{1,4},{2,5},{2,8}};
    
    //Define a pointer to walk the rows of the 2D array.
    int (*p1)[2] = test;
    
    //Define a pointer to walk the columns of each row of the 2D array.
    int *p2 = NULL;
    
    //There are three rows in the 2D array.
    //p1 has been initialized to point to the first row of the 2D array.
    //Make sure the iteration stops after the third row of the 2D array.
    for (; p1 != test+3; ++p1) {
    
        //Iterate over each column of the arrays.
        //p2 is initialized to *p1, which points to the first column.
        //Iteration must stop after two columns. Hence, the breaking
        //condition of the loop is when p2 == *p1+2
        for (p2 = *p1; p2 != *p1+2; ++p2 ) {
            printf("%d\n", *p2);
        }
    }
    • Un poco de explicación se adapte a tu respuesta también. Sin embargo 1+ totalmente puntero del enfoque basado en … 🙂
    • buena sugerencia.
  2. 1

    Tratar el siguiente e investigar

    #include <stdio.h>
    
    int main(void) 
    {
        int test[3][2] = { { 1,4 }, { 2,5 }, { 2,8 } };
    
        for ( int ( *p )[2] = test ; p != test + 3; ++p ) 
        {
            for ( int *q = *p; q != *p + 2; ++q ) printf( "%d ", *q );
            puts( "" );
        }
    
        return 0;
    }   

    La única es

    1 4 
    2 5 
    2 8

    El primer puntero es un puntero a un objeto de tipo int[2] que se apunta a la primera fila de la matriz y, a continuación, debido a los incrementos que apunta a otras filas.. El segundo puntero es un puntero a un objeto de tipo int. Apunta al primer elemento de cada fila en el bucle interno.

  3. 0

    Si declaración de puntero es el objetivo de su práctica, utilice la siguiente inicialización:

    int (*pTest)[rmax][cmax] = test;

    Una vez hecho eso, la sintaxis de uso del puntero de la indexación de los espejos de la matriz de indexación, excepto que usted tiene que utilizar el * de referencia del operador.

    for (int i= 0; i < 3; i++) { 
      for (int j= 0; j < 2; j++) {
         printf ("%d ", *(pTest[i][j])); 
      }
      printf ("\n"); 
    }

    Sin embargo, si aritmética de punteros es el objetivo de su práctica, entonces, la siguiente será trabajar demasiado:

    int *res = &test;
    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < 2; j++) {
        printf ("%d ", *(res + i*2 + j)); 
      }
      printf ("\n"); 
    }

    SALIDA

    1 4  
    2 5  
    2 8
  4. 0

    En algunos compiladores también puede utilizar un solo bucle, el tratamiento de una matriz multidimensional como una matriz unidimensional de lectura en la fila principal de la orden.

    Esto se menciona en El rey de la Programación C: Un Enfoque Moderno (2ª ed., p268).

    #include <stdio.h>
    
    int main(void)
    {
        int test[3][2] = {{1,4},{2,5},{2,8}}, *p;
    
        for(p = &test[0][0]; p <= &test[2][1]; p++)
        {
            printf("%d\n", *p);
        }
        return 0;
    }

Dejar respuesta

Please enter your comment!
Please enter your name here