面试时曾经被问到一个问题,就是关于C语言中二维数组作为参数的问题。
C语言中形如a[x][y]的二维数组是按行来存储数据的,意思就是说C语言会根据第二个长度y来截断数据,然后才能检索。因此,当将二维数组作为函数参数的时候,必须给出y的值,否则不能截断,编译会出错。若想将已有二维数组作为函数参数,可以将二维数组进行强制转换,然后根据*(a + i*y+j)的方式访问元素。示例程序如下(注意标红部分):
#include <iostream>
using namespace std;
void InitMatrix(int*a, int x, int y)
{
int i, j;
for (i = 0; i < x; i++)
for (j = 0; j < y; j++)
*(a + i*y+j) = i+j;
};
int main()
{
int a[3][5] = { 0 };
InitMatrix((int*)a, 3, 5);
cout << a[2][3] << endl;
system("pause");
return 0;
}
以下附上参考链接: