Con trỏ và mản g1 chiều

Một phần của tài liệu Giáo trình ngôn ngữ lập trình 2 (Trang 44 - 45)

7.2.1 Địa chỉ của phần tử đầu tiên và tên mảng

Với khai báo: float a[10];

i: 0 1 2 3 4 5 6 7 8 9 a[i]: . . .

Máy sẽ cấp cho a một vùng nhớ liên tiếp 40 bytes cho 10 phần tử kiểu float. Địa chỉ phần tử đầu tiên của mảng: &a[0]

Theo qui định của C/C++, tên mảng là a chứa địa chỉ phần tử đầu tiên của mảng, nên tên mảng là một hằng địa chỉ:

Và trong mọi ngữ cảnh, C/C++ quy định cách viết:

7.2.2 Phép cộng (+) hay trừ (-) con trỏ với số nguyên dùng cho kiểu mảng 1 chiều:

(Con trỏ trỏ tới phần tử mảng)

Giả sử con trỏ px trỏ tới phần tử a[i], khi đó:

 px + k trỏ tới phần tử thứ k sau a[i], tức là a[i+k];  px -k trỏ tới phần tử thứ k trước a[i], tức là a[i-k];  *(px + i) tương đương với px[i];

 ++px trỏ tới phần tử tiép theo là a[i+1] // Tăng trước  px++ trỏ tới phần tử tiép theo là a[i+1] // Tăng sau  --px trỏ tới phần tử kế trước là a[i-1] // giảm trước  px-- trỏ tới phần tử kế trước là a[i+1] // gỉam sau

7.2.3 Cấp phát động cho mảng 1 chiều thông qua con trỏ:

Ta có thể dùng con trỏ để cài đặt mảng 1 chiều ( biến động ). 1 Khai báo:

KDL *MD; 2. Cấp phát vùng nhớ:

MD = new KDL[MAX]; // Mảng có không quá MAX phần tử 3. Thu hồi vùng nhớ:

delete [ ]MD;

7.2.4 Đối của hàm là con trỏ:

Khi đó, tham số thực có thể là: Địa chỉ của biến có kiểu tương ứng. Con trỏ có kiểu tương ứng.

Tên của mảng một chiều có kiểu tương ứng

Đối Tham số thực

Con trỏ Con trỏ ( cùng kiểu)

Tên mảng 1 chiều ( cùng kiểu)

Một phần của tài liệu Giáo trình ngôn ngữ lập trình 2 (Trang 44 - 45)