全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1273
推到 Plurk!
推到 Facebook!

請問Function call傳遞兩維陣列...陣列大小是由鍵盤所輸入n值所決定

答題得分者是:allenchan
shihyu
一般會員


發表:20
回覆:17
積分:7
註冊:2002-11-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-03 01:13:36 IP:203.70.xxx.xxx 未訂閱
    我主要是想問二維陣列大小是由鍵盤輸入n值來決定陣列大小,,並非預先知道二維陣列大小,,,    使用Function call傳遞兩維陣列    PS:不是一般二維陣列喔....array[n][n];都是變數由鍵盤輸入n值,,,在使用Function call傳二為陣列    例如:    int main()
{    cin>>n;
array[n][n];    sum(這要怎麼寫)  //注意函數傳遞的二維陣列大小預先是不知道是由鍵盤輸入n值    }    void sum(這要怎麼寫)
{     .....    }
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-03 08:40:28 IP:61.62.xxx.xxx 未訂閱
char **array;    cin >> n;    array = new char*[n];
for (int i = 0; i < n; i  )
    array[i] = new char[n];
sum(array, n);    void sum(char **ary, int n)
{
 .....
}
最好把 n 傳進去,這樣才知道 ary 的維度。
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-03 12:07:50 IP:210.243.xxx.xxx 未訂閱
#include 
#include 
#include     int Sum(int** IntArray)
{
        int m, n, iResult = 0;            // 用 _msize 計算原始二維陣列的大小, 使用_msize須include malloc.h
        m = _msize(IntArray) / sizeof(int);
        n = _msize(*IntArray) / sizeof(int);            for(int i = 0; i < m; i  )
        {
                for(int j = 0; j < n; j  )
                {
                        iResult  = IntArray[i][j];
                }
        }            return iResult;
}    int main(int argc, char* argv[])
{
        int** IntArray;
        int m = 0, n = 0; // For IntArray[m][n]            printf("請輸入IntArray[m][n] m的值 : ");
        cin >> m;
        if (m <= 0) 
        {
                printf("m 必須為大於0的整數.\n");
                return -1;
        }            printf("請輸入IntArray[m][n] n的值 : ");
        cin >> n;
        if (n <= 0) 
        {
                printf("n 必須為大於0的整數.\n");
                return -1;
        }            // 分配二維陣列記憶體
        IntArray = (int**) malloc(sizeof(int*) * m); 
        for(int i = 0; i < m; i  )
        {
                IntArray[i] = (int*) malloc(sizeof(int) * n); 
                for (int j = 0; j < n; j  )
                {
                        printf("請輸入IntArray[%d][%d]的值 : ", i, j);
                        cin >> IntArray[i][j];
                }
        }            // 列印結果
        printf("Sum = %d\n", Sum(IntArray));            // 釋放二維陣列記憶體
        for (int k = 0; i < m; i  )
        {
                free(IntArray[k]);
        }
        free(IntArray);            return 0;
}
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-03 13:55:36 IP:203.70.xxx.xxx 未訂閱
呵呵,那改成這樣好了,這樣傳 int **array 可以,double **array 也可以 .... 都可以。    
template 
T Sum(T** IntArray)
{
    int m, n;
    T iResult = 0;
    // 用 _msize 計算原始二維陣列的大小, 使用_msize須include malloc.h
    m = _msize(IntArray) / sizeof(T);
    n = _msize(*IntArray) / sizeof(T);        for(int i = 0; i < m; i  )
    {
        for(int j = 0; j < n; j  )
        {
            iResult  = IntArray[i][j];
        }
    }        return iResult;
}
int main(int argc, char* argv[]) { //以下同 Zard 大大上面的 code } 發表人 - allenchan 於 2004/12/03 14:04:26
系統時間:2024-05-18 16:23:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!