您可以使用宏来定义常数,即#define N 5
。在编译时,定义的宏名称的每个出现都将替换为给定值。在我们的例子中每个N将被替换为5。
但这并不能解决你的问题,因为它会打印5每次,即使您更改数组的尺寸。
将数组的维度作为参数传递。
您可以将二维数组作为指针传递。
我创建了一个打印函数,可以向您展示如何访问数组中的元素。所以该函数的原型如下所示:
void print2DMatrix(int *matrix2D, const int rowLength, const int columnLength);
where matrix2D是一个指针,将传递数组的地址。另外两个参数告诉我们数组的维度。
We can 访问元素在选定的行和选定的列中matrix2D[selectedRow * maxRowLength + selectedColumn]
.
当你调用函数,您可以传递数组的名称,例如print2DMatrix(*myMatrix, myRowLength, myColumnLength);
,当然在使用之前要声明并初始化它。print2DMatrix(myMatrix, myRowLength, myColumnLength);
会导致警告,因为传递的参数和等待的参数具有不同的类型,但它会正确运行。传递的是双指针,而等待的是单指针。因此你必须使用print2DMatrix(*myMatrix, myRowLength, myColumnLength);
, where *我的矩阵将指向数组的第一行。
我想提一下myMatrix and *我的矩阵指向同一个地址,区别在于:myMatrix被视为指向整数的双指针,当*我的矩阵被视为指向整数的指针。跑步printf("%d %d %d", myMatrix, *myMatrix, **myMatrix);
看看结果。**我的矩阵将指向第一行的第一个元素,什么是11。请参阅下面的完整代码...
#include <stdio.h>
#define ROW_LENGTH 5
#define COLUMN_LENGTH 5
void print2DMatrix(int *matrix2D, const int rowLength, const int columnLength)
{
int i;
for (i = 0; i < rowLength; i++)
{
int j;
for (j = 0; j < columnLength; j++)
{
printf("%d ", matrix2D[i * rowLength + j]);
}
printf("\n");
}
}
int main(void)
{
const int myRowLength = ROW_LENGTH;
const int myColumnLength = COLUMN_LENGTH;
int myMatrix[ROW_LENGTH][COLUMN_LENGTH] =
{
{11, 12, 13, 14, 15},
{21, 22, 23, 24, 25},
{31, 32, 33, 34, 35},
{41, 42, 43, 44, 45},
{51, 52, 53, 54, 55}
};
print2DMatrix(*myMatrix, myRowLength, myColumnLength);
return 0;
}