Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Con trỏ hàm






C++ cho phé p thao tá c vớ i cá c con trỏ hà m. Tiệ n í ch tuyệ t vờ i nà y cho phé p truyề n mộ t hà m như là mộ t tham số đ ế n mộ t hà m khá c. Đ ể có thể khai bá o mộ t con trỏ trỏ tớ i mộ t hà m chú ng ta phả i khai bá o nó như là khai bá o mẫ u củ a mộ t hà m như ng phả i bao trong mộ t cặ p ngoặ c đ ơ n () tê n củ a hà m và chè n dấ u sao (*) đ ằ ng trư ớ c.

// pointer to functions #include < iostream.h> int addition (int a, int b){ return (a+b); } int subtraction (int a, int b){ return (a-b); } int (*minus)(int, int) = subtraction; int operation (int x, int y, int (*functocall)(int, int)){ int g; g = (*functocall)(x, y); return (g); } int main (){ int m, n; m = operation (7, 5, & addition); n = operation (20, m, minus); cout < < n; return 0; } 8

Trong ví dụ nà y, minus là mộ t con trỏ toà n cụ c trỏ tớ i mộ t hà m có hai tham số kiể u int , con trỏ nà y đ ư ợ c gá m đ ể trỏ tớ i hà m subtraction , tấ t cả đ ề u trê n mộ t dò ng:

int (* minus)(int, int) = subtraction;

Bà i 10: Bộ Nhớ Đ ộ ng

Cho đ ế n nay, trong cá c chư ơ ng trì nh củ a chú ng ta, tấ t cả nhữ ng phầ n bộ nhớ chú ng ta có thể sử dụ ng là cá c biế n cá c mả ng và cá c đ ố i tư ợ ng khá c mà chú ng ta đ ã khai bá o. Kí ch cỡ củ a chú ng là cố đ ị nh và khô ng thể thay đ ổ i trong thờ i gian chư ơ ng trì nh chạ y. Như ng nế u chú ng ta cầ n mộ t lư ợ ng bộ nhớ mà kí ch cỡ củ a nó chỉ có thể đ ư ợ c xá c đ ị nh khi chư ơ ng trì nh chạ y, ví dụ như trong trư ờ ng hợ p chú ng ta nhậ n thô ng tin từ ngư ờ i dù ng đ ể xá c đ ị nh lư ợ ng bộ nhớ cầ n thiế t.

Giả i phá p ở đ â y chí nh là bộ nhớ đ ộ ng, C++ đ ã tí ch hợ p hai toá n tử newdelete đ ể thự c hiệ n việ c nà y

Hai toá n tử newdelete chỉ có trong C++. Ở phầ n sau củ a bà i chú ng ta sẽ biế t nhữ ng thao tá c tư ơ ng đ ư ơ ng vớ i cá c toá n tử nà y trong C.

Toá n tử newnew[ ]
Đ ể có thể có đ ư ợ c bộ nhớ đ ộ ng chú ng ta có thể dù ng toá n tử new. Theo sau toá n tử nà y là tê n kiể u dữ liệ u và có thể là số phầ n tử cầ n thiế t đ ư ợ c đ ặ t trong cặ p ngoặ c vuô ng. Nó trả về mộ t con trỏ trỏ tớ i đ ầ u củ a khố i nhớ vừ a đ ư ợ c cấ p phá t. Dạ ng thứ c củ a toá n tử nà y như sau:

pointer = new type

hoặ c

pointer = new type [ elements ]

Biể u thứ c đ ầ u tien đ ư ợ c dù ng đ ể cấ p phá t bộ nhớ chứ a mộ t phầ n tử có kiể u type. Lệ nh thứ hai đ ư ợ c dù ng đ ể cấ p phá t mộ t khố i nhớ (mộ t mả ng) gồ m cá c phầ n tử kiể u type.
Ví dụ:

int * bobby;
bobby = new int [5];

trong trư ờ ng hợ p nà y, hệ đ iề u hà nh dà nh chỗ cho 5 phầ n tử kiể u int trong bộ nhớ và trả về mộ t con trỏ trỏ đ ế n đ ầ u củ a khố i nhớ. Vì vậ y lú c nà y bobby trỏ đ ế n mộ t khố i nhớ hợ p lệ gồ m 5 phầ n tử int .

Bạ n có thể hỏ i tô i là có gì khá c nhau giữ a việ c khai bá o mộ t mả ng vớ i việ c cấ p phá t bộ nhớ cho mộ t con trỏ như chú ng ta vừ a là m. Đ iề u quan trọ ng nhấ t là kí ch thư ớ c củ a mộ t mả ng phả i là mộ t hằ ng, đ iề u nà y giớ i hạ n kí ch thư ớ c củ a mả ng đ ế n kí ch thư ớ c mà chú ng ta chọ n khi thiế t kế chư ơ ng trì nh trong khi đ ó cấ p phá t bộ nhớ đ ộ ng cho phé p cấ p phá t bộ nhớ trong quá trì nh chạ y vớ i kí ch thư ớ c bấ t kì.

Bộ nhớ đ ộ ng nó i chung đ ư ợ c quả n lí bở i hệ đ iề u hà nh và trong cá c mô i trư ờ ng đ a nhiệ m có thể chạ y mộ t lú c và i chư ơ ng trì nh có mộ t khả nă ng có thể xả y ra là hế t bộ nhớ đ ể cấ p phá t. Nế u đ iề u nà y xả y ra và hệ đ iề u hà nh khô ng thể cấ p phá t bộ nhớ như chú ng ta yê u cầ u vớ i toá n tử new , mộ t con trỏ null (zero) sẽ đ ư ợ c trả về. Vì vậ y cá c bạ n nê n kiể m tra xem con trỏ trả về bở i toá n tử new có bằ ng null hay khô ng:

int * bobby;
bobby = new int [5];
if (bobby == NULL) {
// error assigning memory. Take measures.
};

Toá n tử delete.
Vì bộ nhớ đ ộ ng chỉ cầ n thiế t trong mộ t khoả ng thờ i gian nhấ t đ ị nh, khi nó khô ng cầ n dù ng đ ế n nữ a thì nó sẽ đ ư ợ c giả i phó ng đ ể có thể cấ p phá t cho cá c nhu cầ u khá c trong tư ơ ng lai. Đ ể thự c hiệ n việ c nà y ta dù ng toá n tử delete , dạ ng thứ c củ a nó như sau:

delete pointer ;

hoặ c

delete [] pointer ;

Biể u thứ c đ ầ u tiê n nê n đ ư ợ c dù ng đ ể giả i phó ng bộ nhớ đ ư ợ c cấ p phá t cho mộ t phầ n tử và lệ nh thứ hai dù ng đ ể giả i phó ng mộ t khố i nhớ gồ m nhiề u phầ n tử (mả ng). Trong hầ u hế t cá c trì nh dị ch cả hai biể u thứ c là tư ơ ng đ ư ơ ng mặ c dù chú ng là rõ rà ng là hai toá n tử khá c nhau.

// rememb-o-matic #include < iostream.h> #include < stdlib.h> int main (){ char input [100]; int i, n; long * l, total = 0; cout < < " How many numbers do you want to type in? "; cin.getline (input, 100); i=atoi (input); l= new long[i]; if (l == NULL) exit (1); for (n=0; n< i; n++) { cout < < " Enter number: "; cin.getline (input, 100); l[n]=atol (input); } cout < < " You have entered: "; for (n=0; n< i; n++) cout < < l[n] < < ", "; delete[] l; return 0; } How many numbers do you want to type in? 5 Enter number: 75 Enter number: 436 Enter number: 1067 Enter number: 8 Enter number: 32 You have entered: 75, 436, 1067, 8, 32,

NULL là mộ t hằ ng số đ ư ợ c đ ị nh nghĩ a trong thư việ n C++ dù ng đ ể biể u thị con trỏ null. Trong trư ờ ng hợ p hằ ng số nà y chư a đ ị nh nghĩ a bạ n có thể tự đ ị nh nghĩ a nó:

#define NULL 0

Dù ng 0 hay NULL khi kiể m tra con trỏ là như nhau như ng việ c dù ng NULL vớ i con trỏ đ ư ợ c sử dụ ng rấ t rộ ng rã i và đ iề u nà y đ ư ợ c khuyế n khí ch đ ể giú p cho chư ơ ng trì nh dễ đ ọ c hơ n.


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.008 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал