以一个例子来说明二维数组作为函数参数的相关内容。
要求:
将一个二维整型数组按照各行首位元素进行 行的重排序。
#include<stdio.h>
void bubble_sort(int (*a)[4], int n);
void swap(int* a, int* b);
int main()
{
int n; //行数
scanf("%d", &n);
int table[n][4];
memset(table, 0, sizeof(table)); //数组元素初始化为0
//数据读入
int i, j;
for(i=0; i<n; i++){
for(j=0; j<4; j++){
scanf("%d", &table[i][j]);
}
}
//行排序
bubble_sort(table, n);
//输出
printf("行排序后:\n");
for(i=0; i<n; i++){
for(j=0; j<4; j++){
printf("%d ", table[i][j]);
}
printf("\n");
}
return 0;
}
//冒泡排序交换各行
void bubble_sort(int (*a)[4], int n)
{
int i, j, k;
for(i=n-1; i>0; i--){
for(j=0; j<i; j++){
if(a[j][0]>a[j+1][0]){
//两行全元素交换
for(k=0; k<4; k++){
swap(&a[j][k], &a[j+1][k]);
}
}
}
}
}
//单个元素交换
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
可见:
参数表中含有二维数组的函数的声明和调用格式如下:
//函数声明
void f(int (*a)[4], int n) //4为数组列数,n为行数
{
...
}
//调用方式
f(a, n);