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 ạ!
Bài liên quan
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 =)))
Nhưng tại sao lại phải có trị số bên trong [] ạ
@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é
mảng tĩnh thì phải cho trước như vậy chứ =)))
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ụ:
Câu trả lời mình tham khảo ở đây
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.