Студопедия

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

КАТЕГОРИИ:

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






Toán tử lấy địa chỉ (&).






Và o thờ i đ iể m mà chú ng ta khai bá o mộ t biế n thì nó phả i đ ư ợ c lư u trữ trong mộ t vị trí cụ thể trong bộ nhớ. Nó i chung chú ng ta khô ng quyế t đ ị nh nơ i nà o biế n đ ó đ ư ợ c đ ặ t - thậ t may mắ n rằ ng đ iề u đ ó đ ã đ ư ợ c là m tự đ ộ ng bở i trì nh biê n dị ch và hệ đ iề u hà nh, như ng mộ t khi hệ đ iề u hà nh đ ã gá n mộ t đ ị a chỉ cho biế n thì chú ng ta có thể muố n biế t biế n đ ó đ ư ợ c lư u trữ ở đ â u.

Đ iề u nà y có thể đ ư ợ c thự c hiệ n bằ ng cá ch đ ặ t trư ớ c tê n biế n mộ t dấ u và (& ), có nghĩ a là " đ ị a chỉ củ a ". Ví dụ:

ted = & andy;

sẽ gá n cho biế n ted đ ị a chỉ củ a biế n andy , vì khi đ ặ t trư ớ c tê n biế n andy dấ u và (& ) chú ng ta khô ng cò n nó i đ ế n nộ i dung củ a biế n đ ó mà chỉ nó i đ ế n đ ị a chỉ củ a nó trong bộ nhớ.

Giả sử rằ ng biế n andy đ ư ợ c đ ặ t ở ô nhớ có đ ị a chỉ 1776 và chú ng ta viế t như sau:

andy = 25;
fred = andy;
ted = & andy;

kế t quả sẽ giố ng như trong sơ đ ồ dư ớ i đ â y:

Chú ng ta đ ã gá n cho fred nộ i dung củ a biế n andy như chú ng ta đ ã là m rấ t lầ n nhiề u khá c trong nhữ ng phầ n trư ớ c như ng vớ i biế n ted chú ng ta đ ã gá n đ ị a chỉ mà hệ đ iề u hà nh lư u giá trị củ a biế n andy , chú ng ta vừ a giả sử nó là 1776 .

Nhữ ng biế n lư u trữ đ ị a chỉ củ a mộ t biế n khá c (như ted ở trong ví dụ trư ớ c) đ ư ợ c gọ i là con trỏ. Trong C++ con trỏ có rấ t nhiề u ư u đ iể m và chú ng đ ư ợ c sử dụ ng rấ t thư ờ ng xuyê n, Tiế p theo chú ng ta sẽ thấ y cá c biế n kiể u nà y đ ư ợ c khai bá o như thế nà o.

Toá n tử tham chiế u (*)

Bằ ng cá ch sử dụ ng con trỏ chú ng ta có thể truy xuấ t trự c tiế p đ ế n giá trị đ ư ợ c lư u trữ trong biế n đ ư ợ c trỏ bở i nó bằ ng cá ch đ ặ trư ớ c tê n biế n con trỏ mộ t dấ u sao (*) - ở đ â y có thể đ ư ợ c dị ch là " giá trị đ ư ợ c trỏ bở i ". Vì vậ y, nế u chú ng ta viế t:

beth = *ted;

(chú ng ta có thể đ ọ c nó là: " beth bằ ng giá trị đ ư ợ c trỏ bở i ted" beth sẽ mang giá trị 25 , vì ted bằ ng 1776 và giá trị trỏ bở i 1776 25 .

Bạ n phả i phâ n biệ t đ ư ợ c rằ ng ted có giá trị 1776 , như ng *ted (vớ i mộ t dấ u sao đ ằ ng trư ớ c) trỏ tớ i giá trị đ ư ợ c lư u trữ trong đ ị a chỉ 1776 , đ ó là 25 . Hã y chú ý sự khá c biệ t giữ a việ c có hay khô ng có dấ u sao tham chiế u.

beth = ted; // beth bằ ng ted (1776) beth = *ted; // beth bằ ng giá trị đ ư ợ c trỏ bở i (25)
Toá n tử lấ y đ ị a chỉ (& ) Nó đ ư ợ c dù ng như là mộ t tiề n tố củ a biế n và có thể đ ư ợ c dị ch là " đ ị a chỉ củ a", vì vậ y & variable1 có thể đ ư ợ c đ ọ c là " đ ị a chỉ củ a variable1 ". Toá n tử tham chiế u (*) Nó chỉ ra rằ ng cá i cầ n đ ư ợ c tí nh toá n là nộ i dung đ ư ợ c trỏ bở i biể u thứ c đ ư ợ c coi như là mộ t đ ị a chỉ. Nó có thể đ ư ợ c dị ch là " giá trị đ ư ợ c trỏ bở i".. *mypointer đ ư ợ c đ ọ c là " giá trị đ ư ợ c trỏ bở i mypointer ".

Và o lú c nà y, vớ i nhữ ng ví dụ đ ã viế t ở trê n

andy = 25;
ted = & andy;

bạ n có thể dễ dà ng nhậ n ra tấ t cả cá c biể u thứ c sau là đ ú ng:

andy == 25& andy == 1776ted == 1776*ted == 25

Khai bá o biế n kiể u con trỏ

Vì con trỏ có khả nă ng tham chiế u trự c tiế p đ ế n giá trị mà chú ng trỏ tớ i nê n cầ n thiế t phả i chỉ rõ kiể u dữ liệ u nà o mà mộ t biế n con trỏ trỏ tớ i khai bá o nó. Vì vậ y, khai bá o củ a mộ t biế n con trỏ sẽ có mẫ u sau:

type * pointer_name ;

trong đ ó type là kiể u dữ liệ u đ ư ợ c trỏ tớ i, khô ng phả i là kiể u củ a bả n thâ n con trỏ. Ví dụ:

int * number;
char * character;
float * greatnumber;

đ ó là ba khai bá o củ a con trỏ. Mỗ i biế n đ ầ u trỏ tớ i mộ t kiể u dữ liệ u khá c nhau như ng cả ba đ ề u là con trỏ và chú ng đ ề u chiế m mộ t lư ợ ng bộ nhớ như nhau (kí ch thư ớ c củ a mộ t biế n con trỏ tù y thuộ c và o hệ đ iề u hà nh). như ng dữ liệ u mà chú ng trỏ tớ i khô ng chiế m lư ợ ng bộ nhớ như nhau, mộ t kiể u int , mộ t kiể u char và cá i cò n lạ i kiể u float .

Tô i phả i nhấ n mạ nh lạ i rằ ng dấ u sao (*) mà chú ng ta đ ặ t khi khai bá o mộ t con trỏ chỉ có nghĩ a rằ ng: đ ó là mộ t con trỏ và hoà n toà n khô ng liê n quan đ ế n toá n tử tham chiế u mà chú ng ta đ ã xem xé t trư ớ c đ ó. Đ ó đ ơ n giả n chỉ là hai tá c vụ khá c nhau đ ư ợ c biể u diễ n bở i cù ng mộ t dấ u.

// my first pointer #include < iostream.h> int main (){ int value1 = 5, value2 = 15; int * mypointer; mypointer = & value1; *mypointer = 10; mypointer = & value2; *mypointer = 20; cout < < " value1==" < < value1 < < " / value2==" < < value2; return 0; } value1==10 / value2==20

Chú ý rằ ng giá trị củ a value1 value2 đ ư ợ c thay đ ổ i mộ t cá ch giá n tiế p. Đ ầ u tiê n chú ng ta gá n cho mypointer đ ị a chỉ củ a value1 dù ng toá n tử lấ y đ ị a chỉ (& ) và sau đ ó chú ng ta gá n 10 cho giá trị đ ư ợ c trỏ bở i mypointer , đ ó là giá trị đ ư ợ c trỏ bở i value1 vì vậ y chú ng ta đ ã sử a biế n value1 mộ t cá ch giá n tiế p

Đ ể bạ n có thể thấ y rằ ng mộ t con trỏ có thể mang mộ t và i giá trị trong cù ng mộ t chư ơ ng trì nh chú ng ta sẽ lặ p lạ i quá trì nh vớ i value2 và vớ i cù ng mộ t con trỏ.

Đ â y là mộ t ví dụ phứ c tạ p hơ n mộ t chú t:

// more pointers #include < iostream.h> int main (){ int value1 = 5, value2 = 15; int *p1, *p2; p1 = & value1; // p1 = đ ị a chỉ củ a value1 p2 = & value2; // p2 = đ ị a chỉ củ a value2 *p1 = 10; // giá trị trỏ bở i p1 = 10 *p2 = *p1; // giá trị trỏ bở i p2 = giá trị trỏ bở i p1 p1 = p2; // p1 = p2 (phé p gá n con trỏ) *p1 = 20; // giá trị trỏ bở i p1 = 20 cout < < " value1==" < < value1 < < " / value2==" < < value2; return 0; } value1==10 / value2==20

Mộ t dò ng có thể gâ y sự chú ý củ a bạ n là:

int *p1, *p2;

dò ng nà y khai bá o hai con trỏ bằ ng cá ch đ ặ t dấ u sao (*) trư ớ c mỗ i con trỏ. Nguyê n nhâ n là kiể u dữ liệ u khai bá o cho cả dò ng là int và vì theo thứ tự từ phả i sang trá i, dấ u sao đ ư ợ c tí nh trư ớ c tê n kiể u. Chú ng ta đ ã nó i đ ế n đ iề u nà y trong bà i 1.3: Cá c toá n tử.


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

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