可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如:
void Func(int array[3][10]);
void Func(int array[][10]);
例2 将二维数组依旧当作二维数组来处理
下面是一个字符串数组的参数传递程序,实现将字符串数组中的字符串按照从小到大的顺序进行排序:
//WordSort实现了对5个字符串的排序
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void WordSort(char p[][10],int RowSize)
{
int n=0,m;
char temp[10];
for(n=0;n
for(m=n+1;m
if( strcmp(p[m],p[n]) < 0 )
{
strcpy(temp,p[n]);
strcpy(p[n],p[m]);
strcpy(p[m],temp);
}
for(n=0;n<5;++n)
printf("In subfunction:%s\n",p[n]);
}
void main()
{
int k=0;
char word[5][10];
for(;k<5;++k)
scanf("%s",&word[k]);
WordSort(word,5);
printf("sorted word:\n");
for(k=0;k<5;k++)
printf("In main function:%s\n",word[k]);
system("pause");
}
例3 用“行指针”传递参数
运行下面程序:
/************************************/
//二维数组作为形参的参数传递方式之一
/************************************/
#include
void print_array_1(int (*a)[3], int Row_Size)
{
int j;
for(j=0;j<3*Row_Size;j++)
{
printf("%d ",(*a)[j]);
if(j%3==2) printf("\n");
}
}
void print_array_2(int (*a)[3], int Row_Size)
{
int i,j;
for(i=0;i
{
for(j=0;j<3;j++)
printf("%d ",*(*(a+i)+j));
printf("\n");
}
}
void main()
{
int i,j,value=0;
int a[4][3]={0};
for(i=0;i<4;i++)
for(j=0;j<3;j++)
a[i][j]=value++;
print_array_1(a,4);
printf("\n");
print_array_2(a,4);
}