传递一维数组比较简单
定义函数:
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];//这种方式更具有一般性,使用方便