Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Con trỏ và mảng.
Trong thự c tế, tê n củ a mộ t mả ng tư ơ ng đ ư ơ ng vớ i đ ị a chỉ phầ n tử đ ầ u tiê n củ a nó, giố ng như mộ t con trỏ tư ơ ng đ ư ơ ng vớ i đ ị a chỉ củ a phầ n tử đ ầ u tiê n mà nó trỏ tớ i, vì vậ y thự c tế chú ng hoà n toà n như nhau. Ví dụ, cho hai khai bá o sau: int numbers [20]; lệ nh sau sẽ hợ p lệ: p = numbers; Ở đ â y p và numbers là tư ơ ng đ ư ơ ng và chú ng có cũ ng thuộ c tí nh, sự khá c biệ t duy nhấ t là chú ng ta có thể gá n mộ t giá trị khá c cho con trỏ p trong khi numbers luô n trỏ đ ế n phầ n tử đ ầ u tiê n trong số 20 phầ n tử kiể u int mà nó đ ư ợ c đ ị nh nghĩ a vớ i. Vì vậ y, khô ng giố ng như p - đ ó là mộ t biế n con trỏ bì nh thư ờ ng, numbers là mộ t con trỏ hằ ng. Lệ nh gá n sau đ â y là khô ng hợ p lệ: numbers = p; bở i vì numbers là mộ t mả ng (con trỏ hằ ng) và khô ng có giá trị nà o có thể đ ư ợ c gá n cho cá c hằ ng. Vì con trỏ cũ ng có mọ i tí nh chấ t củ a mộ t biế n nê n tấ t cả cá c biể u thứ c có con trỏ trong ví dụ dư ớ i đ â y là hoà n toà n hợ p lệ:
Trong bà i " mả ng" chú ng ta đ ã dù ng dấ u ngoặ c vuô ng đ ể chỉ ra phầ n tử củ a mả ng mà chú ng ta muố n trỏ đ ế n. Cặ p ngoặ c vuô ng nà y đ ư ợ c coi như là toá n tử offset và ý nghĩ a củ a chú ng khô ng đ ổ i khi đ ư ợ c dù ng vớ i biế n con trỏ. Ví dụ, hai biể u thứ c sau đ â y: a[5] = 0; // a [offset of 5] = 0 *(a+5) = 0; // pointed by (a+5) = 0là hoà n toà n tư ơ ng đ ư ơ ng và hợ p lệ bấ t kể a là mả ng hay là mộ t con trỏ. Khở i tạ o con trỏ Khi khai bá o con trỏ có thể chú ng ta sẽ muố n chỉ đ ị nh rõ rà ng chú ng sẽ trỏ tớ i biế n nà o, int number; là tư ơ ng đ ư ơ ng vớ i: int number; Trong mộ t phé p gá n con trỏ chú ng ta phả i luô n luô n gá n đ ị a chỉ mà nó trỏ tớ i chứ khô ng phả i là giá trị mà nó trỏ tớ i. Bạ n cầ n phả i nhớ rằ ng khi khai bá o mộ t biế n con trỏ, dấ u sao (*) đ ư ợ c dù ng đ ể chỉ ra nó là mộ t con trỏ, và hoà n toà n khá c vớ i toá n tử tham chiế u. Đ ó là hai toá n tử khá c nhau mặ c dù chú ng đ ư ợ c viế t vớ i cù ng mộ t dấ u. Vì vậ y, cá c câ u lệ nh sau là khô ng hợ p lệ: int number; Như đ ố i vớ i mả ng, trì nh biê n dị ch cho phé p chú ng ta khở i tạ o giá trị mà con trỏ trỏ tớ i bằ ng giá trị hằ ng và o thờ i đ iể m khai bá o biế n con trỏ: char * terry = " hello"; trong trư ờ ng hợ p nà y mộ t khố i nhớ tĩ nh đ ư ợ c dà nh đ ể chứ a " hello" và mộ t con trỏ trỏ tớ i kí tự đ ầ u tiê n củ a khố i nhớ nà y (đ ó là kí tự h') đ ư ợ c gá n cho terry . Nế u " hello" đ ư ợ c lư u tạ i đ ị a chỉ 1702, lệ nh khai bá o trê n có thể đ ư ợ c hì nh dung như thế nà y: cầ n phả i nhắ c lạ i rằ ng terry mang giá trị 1702 chứ khô ng phả i là 'h' hay " hello" . Biế n con trỏ terry trỏ tớ i mộ t xâ u kí tự và nó có thể đ ư ợ c sử dụ ng như là đ ố i vớ i mộ t mả ng (hã y nhớ rằ ng mộ t mả ng chỉ đ ơ n thuầ n là mộ t con trỏ hằ ng). Ví dụ, nế u chú ng ta muố n thay kí tự 'o' bằ ng mộ t dấ u chấ m than, chú ng ta có thể thự c hiệ n việ c đ ó bằ ng hai cá ch: terry[4] = '! '; hã y nhớ rằ ng viế t terry[4] là hoà n toà n giố ng vớ i viế t *(terry+4) mặ c dù biể u thứ c thô ng dụ ng nhấ t là cá i đ ầ u tiê n. Vớ i mộ t trong hai lệ nh trê n xâ u do terry trỏ đ ế n sẽ có giá trị như sau:
|