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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM