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.

Văn Dương viết 00:24 ngày 01/10/2018

Hàng của cậu đây :

void inputElement (int **arr, int sizeRow, int sizeColumn) {
     // do some things
}
viết 00:35 ngày 01/10/2018

int mang[Rows][Columns];

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.

void inputElement (int (*arr)[20], int rows) //chỉ truyền mang[rows][20] vào được.
{
}

int mang1[10][20];
inputElement(mang1, 10);

int mang2[15][20];
inputElement(mang2, 15);

int mang3[10][10];
inputElement(mang3, 10); //ERROR

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

Bài liên quan
0