Cプログラミングでポインタを使用して2次元配列にアクセスする方法は?

Cプログラミングでポインタを使用して2次元配列にアクセスする方法は?ポインターと関数を使用して、2 次元配列の要素を入力および出力する C プログラムを作成します。

入力

Input 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

必要な知識

多次元配列、ポインター、ポインターと配列、関数

ポインタを使用して 2 次元配列にアクセスする方法

ポインタを使用して 2 次元配列にアクセスするには、1 次元配列から基本を思い出してみましょう。 1次元配列の単なる配列なので。

ポインタ array_ptr があるとします 一次元配列のベースアドレスを指しています。ポインターを使用して配列の n 番目の要素にアクセスするには、*(array_ptr + n) を使用します (ここで array_ptr 配列の 0 番目の要素、n を指します アクセスする n 番目の要素であり、n 番目の要素は 0 から始まります)。

これで、2 次元配列は 1 次元配列の配列であることがわかりました。したがって、ポインタを介して 2 次元配列にアクセスする方法を見てみましょう。

二次元配列を考えてみましょう

int matrix[3][3];

上記の配列の場合、

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]

ポインタを使った二次元配列アクセスを下図にまとめてみました。

ポインタを使用して 2 次元配列にアクセスするプログラム

/**
 * 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");
    }
}

出力

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

おすすめの投稿

  • 配列と行列のプログラミング演習のインデックス
  • ポインターを使用して配列をソートする C プログラム
  • ポインターを使用して配列内の要素を検索する C プログラム
  • ポインタを使用して配列を反転する C プログラム
  • ポインタを使用して 2 つの配列を交換する C プログラム
  • ポインターを使用してある配列を別の配列にコピーする C プログラム