Wie greife ich mit Zeigern in der C-Programmierung auf ein zweidimensionales Array zu?

Wie greife ich mit Zeigern in der C-Programmierung auf ein zweidimensionales Array zu?

Wie greife ich mit Zeigern in der C-Programmierung auf ein zweidimensionales Array zu? Schreiben Sie ein C-Programm, um Elemente eines zweidimensionalen Arrays mithilfe von Zeigern und Funktionen einzugeben und auszugeben.

Beispiel

Eingabe

Input elements in 3x3 matrix: 
1 2 3
4 5 6
7 8 9

Ausgabe

Elements of 3x3 matrix: 
1 2 3
4 5 6
7 8 9

Erforderliche Kenntnisse

Mehrdimensionales Array, Zeiger, Zeiger und Arrays, Funktionen

Wie greife ich mit Zeigern auf zweidimensionale Arrays zu?

Um mit einem Zeiger auf ein zweidimensionales Array zuzugreifen, erinnern wir uns an die Grundlagen eines eindimensionalen Arrays. Da es sich nur um ein Array eines eindimensionalen Arrays handelt.

Angenommen, ich habe einen Zeiger array_ptr zeigt auf die Basisadresse eines eindimensionalen Arrays. Um mit dem Zeiger auf das n-te Element des Arrays zuzugreifen, verwenden wir *(array_ptr + n) (wobei array_ptr zeigt auf das 0. Element des Arrays, n ist das n-te Element, auf das zugegriffen werden soll, und das n-te Element beginnt bei 0).

Jetzt wissen wir, dass ein zweidimensionales Array ein Array eines eindimensionalen Arrays ist. Sehen wir uns also an, wie man über einen Zeiger auf ein zweidimensionales Array zugreift.

Nehmen wir ein zweidimensionales Array

an
int matrix[3][3];

Für das obige Array,

matrix               =>    Points to base address of two-dimensional array.
                           Since array decays to pointer.

*(matrix)            =>    Points to first row of two-dimensional array.
*(matrix + 0)        =>    Points to first row of two-dimensional array.
*(matrix + 1)        =>    Points to second row of two-dimensional array.

**matrix             =>    Points to matrix[0][0]
*(*(matrix + 0))     =>    Points to matrix[0][0]
*(*(matrix + 0) + 0) =>    Points to matrix[0][0]
*(*matrix + 1)       =>    Points to matrix[0][1]
*(*(matrix + 0) + 1) =>    Points to matrix[0][1]
*(*(matrix + 2) + 2) =>    Points to matrix[2][2]

Ich habe versucht, den Zugriff auf zweidimensionale Arrays mithilfe des Zeigers im folgenden Bild zusammenzufassen.

Programm zum Zugriff auf ein zweidimensionales Array mit Zeiger

/**
 * C program to access two dimensional array using pointer.
 */

#include <stdio.h>

#define ROWS 3
#define COLS 3

/* Function declaration to input and print two dimensional array */
void inputMatrix(int matrix[][COLS], int rows, int cols);
void printMatrix(int matrix[][COLS], int rows, int cols);



int main()
{
    int matrix[ROWS][COLS];
    int i, j;

    /* Input elements in matrix */
    printf("Enter elements in %dx%d matrix.\n", ROWS, COLS);
    inputMatrix(matrix, ROWS, COLS);


    /* Print elements in matrix */
    printf("Elements of %dx%d matrix.\n", ROWS, COLS);
    printMatrix(matrix, ROWS, COLS);


    return 0;
}




/**
 * Function to take input in two dimensional array (matrix) 
 * from user.
 *
 * @matrix  2D array to store input.
 * @rows    Total rows in 2D matrix.
 * @cols    Total columns in 2D matrix.
 */
void inputMatrix(int matrix[][COLS], int rows, int cols)
{
    int i, j;


    for(i = 0; i < rows; i++)
    {
        for(j = 0; j < cols; j++)
        {
            // (*(matrix + i) + j is equivalent to &matrix[i][j]
            scanf("%d", (*(matrix + i) + j));
        }
    }
}



/**
 * Function to display elements of two dimensional array (matrix)
 * on console.
 *
 * @matrix  2D array to display as output.
 * @rows    Total rows in 2D matrix.
 * @cols    Total columns in 2D matrix.
 */
void printMatrix(int (*matrix)[COLS], int rows, int cols)
{
    int i, j;


    for (i = 0; i < rows; i++)
    {
        for (j = 0; j < cols; j++)
        {
            // *(*(matrix + i) + j) is equivalent to matrix[i][j]
            printf("%d ", *(*(matrix + i) + j));
        }

        printf("\n");
    }
}

Ausgabe

Enter elements in 3x3 matrix.
1 2 3
4 5 6
7 8 9
Elements of 3x3 matrix.
1 2 3
4 5 6
7 8 9

Empfohlene Beiträge

  • Index der Übungen zur Array- und Matrixprogrammierung.
  • C-Programm zum Sortieren von Arrays mit Zeigern.
  • C-Programm zum Suchen eines Elements in einem Array mithilfe von Zeigern.
  • C-Programm zum Umkehren eines Arrays mithilfe von Zeigern.
  • C-Programm zum Austauschen zweier Arrays mit Zeiger.
  • C-Programm zum Kopieren eines Arrays in ein anderes mithilfe von Zeigern.