#include<iostream>
#include<cstdio>
#define NROWS 3
#define NCOLUMNS 4
using namespace std;
void func1(int **arr,int m, int n)
{
int i,j;
for (i=0; i<m; i++)
for (j=0; j<n; ++j)
{
printf("arr[%d][%d] = %d\n", i, j, *((int*)arr + i*n+j)); //注意,此处为*(*arr + i*n+j) 则失败
// cout << "use func1,arr[1][2]="<< arr[1][2] << endl; //错误的
}
}
void func2(int arr[][NCOLUMNS], int m, int n)
{
int i,j;
for (i=0; i<m; i++)
for (j=0; j<NCOLUMNS; ++j)
{
// printf("arr[%d][%d] = %d\n", i, j, *((int*)arr + i*NCOLUMNS+j)); //可以
// printf("arr[%d][%d] = %d\n", i, j, arr[i][j]); //可以
printf("arr[%d][%d] = %d\n", i, j, *(*(arr+i)+j)); //可以
}
}
void func3(int (*p)[NCOLUMNS], int m, int n)
{ //int (*p)[NCOLUMNS]与int arr[][NCOLUMNS]是等价的
int i,j;
for (i=0; i<m; i++)
for (j=0; j<NCOLUMNS; ++j)
{
// printf("p[%d][%d] = %d\n", i, j, *(*(p+i)+j)); //也是可以的!!
// printf("arr[%d][%d] = %d\n", i, j, *((int*)p + i*NCOLUMNS+j));//也是可以的!!
printf("p[%d][%d] = %d\n", i, j, p[i][j]);
}
}
void func4(int *p, int m, int n)
{
int i,j;
for (i=0; i<m; i++)
for (j=0; j<n; ++j)
printf("arr[%d][%d] = %d\n", i, j, *(p+i*n+j));
}
int main()
{
int a[NROWS][NCOLUMNS] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
func1((int**)a, 3, 4);
func2(a, 3, 4);
func3(a, 3, 4);
func4((int*)a, 3, 4);
return 0;
}//end main
二维数组作为函数参数——代码
最新推荐文章于 2022-09-11 14:00:56 发布