C++傳遞二維數組參數

傳遞一維數組比較簡單

定義函數:

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];//這種方式更具有一般性,使用方便













 




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章