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;
}