30/09/2018, 16:18

Cách khai báo mảng đa chiều?

Anh ạ. em đang học về mảng và hàm. nhưng gần đây gặp 1 số vấn đề khúc mắc. Cần anh giải thích.Cụ thể là khi em khai báo 1 mảng đa chiều ở hàm main. và muốn nhập bằng 1 hàm void khác. thì mình cần phải khai báo tham trị ở ngay bên cạnh tên hàm đúng không ạ. Nhưng với mang đa chiều cần khai báo như thế nào ạ.

#include<stdio.h>
void nhap(int a[][100], int &hang,int &cot)
{
}
int main ()
{
    int a[100][100],hang,cot;
}

Với đoạn code trên thì sao lại phải khai báo a[][100] như vậy mà k được a[][] hoặc a[]?
Em cảm ơn ạ!

X viết 18:33 ngày 30/09/2018

mảng 2 chiều thì phải a[][] chứ… [][] là [ndòng][ncột]

mà a[][100] hay a[100][100] thì hình như C++ nó hiểu là như nhau thôi =)))

Dương Nguyễn Văn viết 18:26 ngày 30/09/2018

Nhưng tại sao lại phải có trị số bên trong [] ạ

Nguyễn Minh Dũng viết 18:33 ngày 30/09/2018

@D_ng_Nguy_n_Van Xem cách post code dùng Markdown ở đây nhé.

P/S: @D_ng_Nguy_n_Van có muốn đổi nick thành Duong_Nguyen_Van hay nick khác không? Vào đây nhé

X viết 18:33 ngày 30/09/2018

mảng tĩnh thì phải cho trước như vậy chứ =)))

Hieu Nguyen Van viết 18:20 ngày 30/09/2018

Về bản chất thì mảng 2 chiều cũng có cơ chế lưu trữ như mảng 1 chiều. Tức là 1 dãy bộ nhớ tuần tự liên tục và biến mảng chỉ lưu địa chỉ ô đầu tiên của mảng.

Nhưng khi truy vấn và thao tác, chúng ta truyền vào dạng chỉ số [hàng][cột]. Khi đó, việc chỉ định rõ số lượng phần tử của cột là cần thiết để trình biên dịch có thể ánh xạ [hàng][cột] sang địa chỉ thực tế 1 chiều trên bộ nhớ.

Ví dụ:

int ncols = 5;
int array2D[3][ncols] = 
	{
		{ 1,  2,  3,  4,  5 },  //row 1
		{ 6,  7,  8,  9,  10 }, //row 2
		{ 11, 12, 13, 14, 15 }  //row 3
	};
cout << a[1][2]; // Thực chất là a[1*ncols + 2]

Câu trả lời mình tham khảo ở đây

rogp10 viết 18:21 ngày 30/09/2018

a[2][3] nghĩa là (pt ở) dòng 2 cột 3 của a

Không gian địa chỉ là 1D, vậy tạo thành mảng 2D thì phải có công thức nhưng muốn quy đổi thì phải biết mảng có bao nhiêu cột. Thì đó

note

Công thức như sau a[i][j] = *(a + i * no_col + j); nhưng đây là chi tiết cài đặt.

Bài liên quan
0