傳遞一維數組比較簡單
定義函數:
void function1(int *p,int size);.//size是數組大小
另調用程序中定義有數組:
int a[5] = { 1, 2, 3, 4, 5 };
函數調用時如下:
function1(a, 5);
在被調函數中使用元素時*(a+i)表示的就是元素a[i]
二維數組就比較麻煩了
首先在調用函數中(主函數)定義二維數組:
int data[3][2] = { 1, 2, 3, 4, 5, 6 };
首先說在本函數(調用函數)中數組的索引方式:
要找第i行第j列的值
data[i][j]或者定義指針,指向數組名
int(*pdata)[2] = data1;
cout << *(*pdata + 2) << endl;
這種方法是向後順延,數組在內存中的排序是一行一行的向後展開的,要想尋址i行j的元素,需要自己手動算出此位置的一維索引值:i*列數+j 然後寫在2那個位置即可
cout << *(*pdata + i*2+j) << endl;
i和j就是要尋址的元素,第i行,第j列,C++中行和列都是從0開始的
定義被調函數是,形參應該寫
int **p
如下定義被調函數:
void function(int **p, int m, int n)//m行數,n列數
{
int i(0), j(0);
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
cout << *((int*)p + i*n + j)<<'\t';
}
cout << endl;
}
}
調用時寫法:
function((int **)data1, 3, 2);
*((int*)p + i*n + j)
或者
p[i][j];//這種方式更具有一般性,使用方便