Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
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; 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 là 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.
Và o lú c nà y, vớ i nhữ ng ví dụ đ ã viế t ở trê n andy = 25; 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 == 25Khai 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; đ ó 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.
Chú ý rằ ng giá trị củ a value1 và 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:
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ử.
|