C++二维数组做函数参数

二维数组做函数参数的形式主要有:

/对于一个m行n列int元素的二维数组
//函数f的形参形式
f(int daytab[m][n]) {...}

//以下两种可以忽略行数
f(int daytab[][n]) {...}

f(int (*daytab)[n]) {...}

这里都不能忽略第二维的大小。主要 原因是二维数组在栈内分配的内存是连续的,它的每一行都有相同的元素,这样,array[i][j] 和 *(*(array +i) +j)是一样的,程序是知道array+i的i实际上偏移了i*N个单位,这也导致了在二维数组array[3][3]中,使用下标array[2][1]和array[1][4]是访问的同一个元素,尽管后者的下标对于一个3*3矩阵来说是非法的,但这并不影响访问。

以指针的指针来表示二维数组,动态分配内存的形式:

这样的方法可以让第二维(即每一行)的大小不必完全相等,严格来说,并不是二维数组,但这也有对应的好处。以这样分配的内存,可以直接以指针的指针作为函数参数,并在子函数中用双下标直接访问。

#include <iostream>
#include <stdio.h>

void out(double **a,int m, int n)
{
    int i, j;
    double b=0.0;
    for(i=0; i<m; i++)
    {
        for (j=0; j<n; j++)
        {
            a[i][j] = b;
            b += 1.2;
            printf("%5.1f",a[i][j]);
        }
        std::cout << std::endl;
    }   

}

int main(int argc, char * agrv)
{
    int i, j, m=2, n=3;
    double **a;
    
    a = new double*[m];
    for (i=0; i<m; i++)
        a[i] = new double[n];

    out(a,m,n);

    return 1;
}

 

posted @ 2015-03-30 14:32  needcontinue  阅读(16366)  评论(0编辑  收藏  举报