Một mảng nhiều chiều cũng có thể được biểu diễn dưới dạng con trỏ của mảng một chiều (tín của mảng) vă một độ dời (chỉ số). Thực hiện được điều năy lă bởi vì một mảng nhiều chiều lă một tập hợp của câc mảng một chiều.Ví dụ, một mảng hai chiều có thể được định nghĩa như lă một con trỏ đến một nhóm câc mảng một chiều kế tiếp nhau. Cú phâp bâo mảng hai chiều có thể viết như sau:
data_type (*ptr_var)[expr 2]; thay vì
data_type array[expr 1][expr 2];
Khâi niệm năy có thể được tổng quât hóa cho câc mảng nhiều chiều, đó lă, data_type (*ptr_var)[exp 2] .... [exp N];
thay vì
data_type array[exp 1][exp 2] ... [exp N];
Trong câc khai bâo trín, data_type lă kiểu dữ liệu của mảng, ptr_var lă tín của biến con trỏ, array lă tín mảng, vă exp 1, exp 2, exp 3, ... exp N lă câc giâ trị nguyín dương xâc định số lượng tối đa câc phần tử mảng được kết hợp với mỗi chỉ số.
Chú ý dấu ngoặc () bao quanh tín mảng vă dấu * phía trước tín mảng trong câch khai bâo theo dạng con trỏ. Cặp dấu ngoặc () lă không thể thiếu, ngược lại cú phâp khai bâo sẽ khai bâo một mảng của câc con trỏ chứ không phải một con trỏ của một nhóm câc mảng.
Ví dụ, nếu ary lă một mảng hai chiều có 10 dòng vă 20 cột, nó có thể được khai bâo như sau:
int (*ary)[20]; thay vì
Trong sự khai bâo thứ nhất, ary được định nghĩa lă một con trỏ trỏ tới một nhóm câc mảng một chiều liín tiếp nhau, mỗi mảng có 20 phần tử kiểu số nguyín. Vì vậy, ary trỏ đến phần tử đầu tiín của mảng, đó lă dòng đầu tiín
(dòng 0) của mảng hai chiều. Tương tự, (ary + 1) trỏ đến dòng thứ hai của mảng hai chiều, ...
Một mảng thập phđn ba chiều fl_ary có thể được khai bâo như: float (*fl_ary)[20][30];
thay vì
float fl_ary[10][20][30];
Trong khai bâo đầu, fl_ary được định nghĩa như lă một nhóm câc mảng thập phđn hai chiều có kích thước 20 x 30 liín tiếp nhau. Vì vậy, fl_ary trỏ đến mảng 20 x 30 đầu tiín, (fl_ary + 1) trỏ đến mảng 20 x 30 thứ hai,...
Trong mảng hai chiều ary, phần tử tại dòng 4 vă cột 9 có thể được truy
xuất sử dụng cđu lệnh: ary[3][8];
hoặc
*(*(ary + 3) + 8);
Câch thứ nhất lă câch thường được dùng. Trong câch thứ hai, (ary + 3) lă một con trỏ trỏ đến dòng thứ 4. Vì vậy, đối tượng của con trỏ năy, *(ary + 3), tham chiếu đến toăn bộ dòng. Vì dòng 3 lă một mảng một chiều, *(ary + 3) lă một con trỏ trỏ đến phần tử đầu tiín trong dòng 3, sau đó 8 được cộng văo con trỏ. Vì vậy, *(*(ary + 3) + 8) lă một con trỏ trỏ đến phần tử 8 (phần tử thứ 9) trong dòng thứ 4. Vì vậy đối tượng của con trỏ năy, *(*(ary + 3) + 8), tham chiếu đến tham chiếu đến phần tử trong cột thứ 9 của dòng thứ 4, đó lă ary [3][8].
Có nhiều câch thức để định nghĩa mảng, vă có nhiều câch để xử lý câc phần tử mảng. Lựa chọn câch thức năo tùy thuộc văo người dùng. Tuy nhiín, trong câc ứng dụng có câc mảng dạng số, định nghĩa mảng theo câch thông thường sẽ dễ dăng hơn.
BĂI TẬP
1. Nhập một chuỗi kí tự từ băn phím sau đó hiển thị từ vă số lượng nguyín đm. 2. Sử dụng kiểu con trỏ lăm lại tất cả câc băi tập của chương 5 (mảng)