30/09/2018, 22:23
Pass mảng 2 chiều vào hàm trong C++
Như tiêu đề, em muốn tạo một hàm để nhập giá trị phần tử cho một mảng 2 chiều, vd:
void inputElement (int arr[][], int sizeRow, int sizeColumn) {
for (int r=0; r<sizeRow; r++) {
for (int c=0; c<sizeColumn; c++) {
cout << "Enter element [" << r << "][" << c << "]: ";
cin >> arr[r][c];
}
}
}
nhưng khi compile thì bị báo lỗi. Em lên search google thì có cách chỉ này:
void inputElement (int *arr, int sizeRow, int sizeColumn) {
for (int r=0; r<sizeRow; r++) {
for (int c=0; c<sizeColumn; c++) {
cout << "Enter element [" << r << "][" << c << "]: ";
cin >> arr[r*sizeColumn+c];
}
}
}
int main() {
...
int mang[Rows][Columns]; //Rows & Columns là 2 biến nhập vào từ bàn phím
inputElement ((int *)mang, Rows, Columns);
...
}
Em không hiểu cách này lắm. Tại sao khi gọi hàm thì phải (int *)mang
?
Và sư huynh nào có những cách khác thì chỉ giáo với ạ! Em cảm ơn.
Bài liên quan
Hàng của cậu đây :
khai báo kiểu này thì
mang
là mảng chứa mảng, chỉ có thể chuyển thành con trỏ tới mảng, chứ ko chuyển thành con trỏ tới con trỏ được.ví dụ
int mang[10][20];
thìmang
có thể hiểu là con trỏ tới mảng 20 số nguyên. Nếu con trỏmang
có giá trị là 100 thìmang+1
là con trỏ có giá trị 100 + 4*20 = 180.xài std::vector cho khỏe ``` void inputElement(vector< vector >& arr) { for (size_t i = 0; i < arr.size(); i++) //arr.size() là số lượng dòng { for (size_t j = 0; j < arr[i].size(); j++) //arr[i].size() là số cột của mỗi dòng { //... } } }
vector< vector > mang(rows, vector(cols));
inputElement(mang);