Chương IV con trỏ và số học địa chỉ Nội dung chính


-Khi gặp toán tử new, chương trình sẽ tìm trong bộ nhớ một lượng ô nhớ còn rỗi và liên tục với số lượng đủ theo yêu cầu và cho p trỏ đến địa chỉ (byte đầu tiên) của vùng nhớ này



tải về 0.51 Mb.
trang3/4
Chuyển đổi dữ liệu02.08.2022
Kích0.51 Mb.
#52781
1   2   3   4
Bản trình bày không có tiêu đề
Doc1

-Khi gặp toán tử new, chương trình sẽ tìm trong bộ nhớ một lượng ô nhớ còn rỗi và liên tục với số lượng đủ theo yêu cầu và cho p trỏ đến địa chỉ (byte đầu tiên) của vùng nhớ này.

-Nếu không có vùng nhớ với số lượng như vậy thì việc cấp phát là thất bại và p = NULL (NULL là một địa chỉ rỗng, không xác định).

C. Thu hồi bộ nhớ động với toán tử delete:

-Để giải phóng bộ nhớ đã cấp phát cho một biến (khi không cần sử dụng nữa) ta sử dụng câu lệnh delete.

delete p ; // p là con trỏ được sử dụng trong new

-Và để giải phóng toàn bộ mảng được cấp pháp thông qua con trỏ p ta dùng câu lệnh:

delete[] p ; // p là con trỏ trỏ đến mảng

- Nên hạn chế dùng nhiều con trỏ trỏ vào cùng một địa chỉ.

- Cần giải phóng vùng nhớ khi ra khỏi phạm vi con trỏ hoặc trước khi gán.

4.5 Con trỏ và mảng, chuỗi

A. Con trỏ và mảng 1 chiều : Việc cho con trỏ trỏ đến mảng

-Cũng tương tự trỏ đến các biến khác, tức gán địa chỉ của mảng (chính là tên mảng) cho con trỏ. Chú ý rằng địa chỉ của mảng cũng là địa chỉ của thành phần thứ 0 nên a+i sẽ là địa chỉ thành phần thứ i của mảng a.

Ví dụ: In toàn bộ mảng thông qua con trỏ.

Cho : int a[5] = {1, 2, 3, 4, 5}, *p, i;

Cách 1: p = a;

for (i=0; i<5; i++) cout << *(p+i) <<"\t"; // p không thay đổi

Cách 2: for (p=a; p<=a+4; p++) cout << *p <<"\t"; // thay đổi p

B. Con trỏ và mảng 2 chiều :

B. Con trỏ và mảng 2 chiều :

Ví dụ sau đây cho phép nhập và in một mảng 2 chiều m*n (m dòng, n cột) thông qua con trỏ p.

Nhập liên tiếp m*n số vào mảng và in thành ma trận m dòng, n cột.

float a[2][3], *p;

int i, j;

p = (float*) a; //Ép kiểu của a về con trỏ float

for (i=0; i<2*3; i++) cin >> *(p+i); // Nhập dãy 6 phần tử.

for (i=0; i<2; i++) // In dãy dạng ma trận

{ for (j=0; j<3; j++) cout << *(p+i*3+j)<<" ";

cout << endl;

}

C. Con trỏ và chuỗi:

C. Con trỏ và chuỗi:


tải về 0.51 Mb.

Chia sẻ với bạn bè của bạn:
1   2   3   4




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2022
được sử dụng cho việc quản lý

    Quê hương