C++ -傳遞二維陣列

C++ -傳遞二維陣列 (Pass 2D array as a function parameter in C++)

如果你對二維陣列不是很了解,可以先來這裡看看
https://husking-studio.com/cpp-2d-array/

二維陣列到底怎麼傳進函式?指標?還要給數量?到底是 ROW 的數量還是 COLUMN 的數量?

宣告二維陣列

void Test01()
{
	int A[2][3] =
	{
		{0, 1, 2},
		{3, 4, 5}
	};

	Print01(A, 2);

	Print02(A, 2);

	int* p1[2];
	for (int i = 0; i < 2; i++)
		p1[i] = A[i];		//取列

	Print03(p1, 2, 3);

	int* p2 = &A[0][0];
	Print04(p2, 2, 3);
}

方法1-建議使用

void Print01(int p[2][3], int row)
{
	cout << "Print01" << endl;
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			cout << p[i][j] << " ";
		}
		cout << endl;
	}
}

方法2

void Print02(int p[][3], int row)
{
	cout << "Print02" << endl;
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			cout << p[i][j] << " ";
		}
		cout << endl;
	}
}

方法3

void Print03(int** p, int row, int col)
{
	cout << "Print03" << endl;
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			cout << p[i][j] << " ";
		}
		cout << endl;
	}
}

方法4 – 要理解這個方法必須對指標非常了解

void Print04(int* p, int row, int col)
{
	cout << "Print04" << endl;
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			cout << *(p + ((i * col) + j)) << " ";
		}
		cout << endl;
	}
}

動態宣告的二維陣列

void Test02()
{
	int row = 2;
	int col = 3;

	//動態宣告二維陣列
	int** data;
	data = new int* [row];
	for (int i = 0; i < row; i++)
		data[i] = new int[col];

	//賦值
	int n = 0;
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			data[i][j] = n;
			n++;
		}
	}

	//印出
	Print03(data, row, col);

	//delete
	for (int i = 0; i < row; i++)
		delete[] data[i];
	delete[] data;
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *