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 プログラム