在用二維陣列名作為引數傳遞時容易出現segmention error。這是因為不能正確為二維陣列中元素定址的問題,正確的方法如下:
1. 用指向一維陣列的指標變數,如下例子所示:
[cpp]view plain
copy
print?
#include
#include
#define n 4
void
testarr(
int(*a)[n],
intm)
} intmain()
, };
testarr(a, 2);
}
int (*a)[n] 表示指向一維陣列的指標變數,即a所指向的物件是含有4個整型元素的陣列。注意 () 不能少,若定義成:
int *a[n] 則表示有乙個一維陣列a[n],該陣列中的所有元素都是 (int *)型別的元素。
在這裡,在子函式中訪問二維陣列中的元素可以用 a[i][j] 或者 *(*(a+i)+j)
2. 將二維陣列的兩個維度用變數的形式傳遞過去
如下所示:
[cpp]view plain
copy
print?
#include
#include
#define n 4
void
testarray(
int**a,
intm,
intn)
} intmain()
, };
testarray((int
**)a, 2, n);
}
此時在子函式中不能使用a[i][j]的形式訪問陣列元素,因為陣列元素都是順序儲存,位址連續,在使用a[i][j]訪問陣列元素時,無法順序訪問到指定的元素,所有我們只能通過計算指定所要訪問的元素。
本文**:
二維陣列名做引數傳遞問題
在用二維陣列名作為引數傳遞時容易出現segmention error。這是因為不能正確為二維陣列中元素定址的問題,正確的方法如下 1.用指向一維陣列的指標變數,如下例子所示 cpp view plain copy print?include include define n 4 void testa...
二維陣列名如何作為引數傳遞
在用二維陣列名作為引數傳遞時容易出現segmention error。這是因為不能正確為二維陣列中元素定址的問題,正確的方法如下 cpp view plain copy include include define n 4 void testarray int a,intm,intn intmain...
二維陣列名充當函式引數
正文 首先,我引用了譚浩強先生編著的 c程式設計 上面的一節原文,它簡要介紹了如何 將二維陣列作為引數傳遞,原文如下 略有改變,請原諒 原文開始 可以用二維陣列名作為實參或者形參,在被呼叫函式中對形引數組定義時可以可以指 定所有維數的大小,也可以省略第一維的大 明,如 void func int a...