处理二维数组的函数:数组的行可以在函数调用时传递,但是数组的列只能被预置在函数内部
示例代码:
#define COLS 4
int sum(int arr[][COLS], int rows)
{
    int r;
    int c;
    int temp = 0;
    for(r = 0; r < rows; r++)
    {
        for(c = 0; c < COLS; c++)
        {
            temp += arr[r][c];
        }
    }
    return temp;
}假设定义数组array[3][4],函数调用形式为:
sum_arr = sum(array, 3); // 行数可以以参数形式传递给参量rows这是因为数组的维数必须是常量,不能用一个变量代替COLS
C99引入变长数组,允许使用变量定义数组各维
int a = 3;
int b = 4;
int array[a][b]; // 一个变长数组变长数组的限制:必须是自动存储类,意味着变长数组必须在函数内部或作为函数参量声明,并且声明时不可以进行初始化
变长数组的大小不会变化:变长数组的大小在创建之后保持不变,“变”的意思是数组的维数可以使用变量进行指定
1)函数声明
如何声明带有一个二维变长数组参数的函数:
int sum(int r, int c, int arr[r][c]); // arr是一个变长数组
                                      // 前面两个参量作为数组参量arr的维数
                                      // 因为arr的声明中使用了r和c
                                      // 所以r和c的声明需早于arrC99标准规定,可以省略函数原型中的名称;如果省略名称,需用*代替省略的维数
int sum(int, int, int arr[*][*]); 2)函数定义
int sum(int r, int c, int arr[r][c])
{
    int i, j;
    int temp = 0;
    for(i = 0 ; i < r; i++)
    {
        for(j = 0; j < c; j++)
        {
            temp += arr[i][j];
        }
    }
    return temp;
}区别古典C,函数定义时,用变量c代替常量COLS,因为使用了变长数组
3)函数使用
示例代码:
#include <stdio.h>
int sum(int r, int c, int arr[r][c]);
int main(void)
{
    int rows = 3;
    int cols = 5;
    int i, j;
    int array_1[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };
    int array_v[rows][cols];
    for(i = 0; i < rows; i++)
    {
        for(j = 0; j < cols; j++)
        {
            array_v[i][j] = i * j;
        }
    }
    printf("3 * 4 array:\n");
    printf("sum of all elements is %d\n", sum(3, 4, array_1));
    printf("3 * 5 VAL:\n");
    printf("sum of all elements is %d\n", sum(rows, cols, array_v));
}
int sum(int r, int c, int arr[r][c])
{
    int i, j;
    int temp = 0;
    for(i = 0; i < r; i++)
    {
        for(j = 0; j < c; j++)
        {
            temp += arr[i][j];
        }
    }
    return temp;
}运行结果:

变长数组允许动态分配存储单元,可以在程序运行时指定数组的大小
常规的C数组是静态存储分配,数组大小在编译时已经确定(因为数组大小是常量,所以编译器可以得到这些信息)



















