陣列與指標

2021-07-23 09:29:58 字數 1871 閱讀 4401

在表示式中使用陣列名時,該名字會自動轉換為指向陣列第乙個元素的指標。在使用下標訪問陣列時,實際上是對指向陣列元素的指標做下標操作。在指標上加上乙個整形數值,其結果仍然是指標。對陣列名取位址

,返回乙個指向陣列的指標,此時指標的算術運算單位為sizeof(陣列長度)。

int a[n];

int* p;

p = &a; //a[index] equivalent to *(p+index)

因為陣列不能複製,所以無法編寫使用陣列型別形參的函式。陣列會被自動轉化為指標,所以處理陣列的函式通常通過操縱指向陣列中的元素的指標來處理陣列。通常,將陣列形參直接定義為指標比使用陣列語法定義要好。這樣就明確地表示,函式操縱的是指向陣列元素的指標,而不是陣列本身。由於忽略了陣列長度,形參定義中如果包含了陣列長度則特別容易引起誤解。當編譯器檢查陣列形參關聯的實參時,它只會檢查實參是不是指標、指標的型別和陣列元素的型別是否匹配,而不會檢查陣列的長度。

hunger:

動態陣列

動態分配陣列時,如果陣列元素具有類型別,將使用該類的預設建構函式實現初始化;如果陣列元素是內建型別,則無初始化。

動態分配的記憶體最後必須進行釋放,否則記憶體最終將逐漸耗盡。如果不在需要使用動態建立的陣列,程式設計師必須顯式地將其占用的儲存空間返回給程式的自由儲存區。c++語言為指標提供delete 表示式釋放指標所指向的陣列空間。該語句**了指向的陣列,把相應的記憶體還給自由儲存區。在關鍵字delete和指標之間的空方括號對是必不可少的,它告訴編譯器該指標指向的是自由儲存區中的陣列,而並非單個物件。遺漏空方括號對是乙個編譯器無法發現的錯誤,將導致程式在執行時出錯。

理論上,**陣列時缺少空括號對,有可能會導致執行時少釋放了記憶體空間,從而產生記憶體洩漏(memory leak)。對於某些系統和/或元素型別,有可能會帶來更嚴重的執行時錯誤。

delete 和 delete 的真正區別

記憶體洩漏也稱作「儲存滲漏」,用動態儲存分配函式動態開闢的空間,在使用完畢後未釋放,結果導致一直佔據該記憶體單元。直到程式結束。(其實說白了就是該記憶體空間使用完畢之後未**)即所謂記憶體洩漏。

記憶體洩漏形象的比喻是「作業系統可提供給所有程序的儲存空間正在被某個程序榨乾」,最終結果是程式執行時間越長,占用儲存空間越來越多,最終用盡全部儲存空間,整個系統崩潰。所以「記憶體洩漏」是從作業系統的角度來看的。這裡的儲存空間並不是指物理記憶體,而是指虛擬記憶體大小,這個虛擬記憶體大小取決於磁碟交換區設定的大小。由程式申請的一塊記憶體,如果沒有任何乙個指標指向它,那麼這塊記憶體就洩漏了。

從使用者使用程式的角度來看,記憶體洩漏本身不會產生什麼危害,作為一般的使用者,根本感覺不到記憶體洩漏的存在。真正有危害的是記憶體洩漏的堆積,這會最終消耗盡系統所有的記憶體。從這個角度來說,一次性記憶體洩漏並沒有什麼危害,因為它不會堆積,而隱式記憶體洩漏危害性則非常大,因為較之於常發性和偶發性記憶體洩漏它更難被檢測到。

blog:

*操作符(解引用操作符)將獲取指標所指的物件,x[i]等效於*(x+i)。

給引用賦值修改的是該引用所關聯的物件的值,而不是使引用與另乙個物件關聯。當引用初始化後,只要該引用存在,它就保持繫結到初始化時指向的物件,不可能將引用繫結到另乙個物件。

hunger:指標ptr1-ptr2的實際運算是(ptr1-ptr2)/sizeof(address length)。

管理指標成員

(類)指標成員預設具有與指標物件同樣的行為。然而,通過不同的複製控制策略,可以為指標成員實現不同的行為。大多數c++類採用以下三種方法之一管理指標成員:

智慧型指標

定義只能指標的通用技術是採用乙個使用計數(use count),有時也稱為引用計數(reference count),智慧型指標類將乙個計數器與類指向的物件相關聯。使用計數跟蹤該類有多少個物件共享同乙個指標。使用計數為0時,刪除物件。

auto_ptr

指標與陣列,指標陣列 陣列指標

int a 10 print n a p,a p a,a print n a 1 p,a 1 p a 1,a 1 a做乙個指標,步長為4,指向乙個元素,a做乙個指標,步長為40,指向乙個維陣列 int b 3 4 print n b p,b p,b p b,b,b print n b 1 p,b 1...

指標陣列與陣列指標

1.指標陣列 指標陣列中每乙個元素都是乙個指標,也既是存放字串的首位址。所以指標陣列適合處理若干個長度不等的字串。定義的一般形式為 型別說明符 指標陣列名 陣列長度 例如 int p 3 宣告乙個陣列,指標陣列p,由3個int型別指標變數元素組成 從運算子的優先順序分析,由於 的優先順序大於 所以p...

指標陣列與陣列指標

呵呵,實在是厭倦了繞口的解釋。指標陣列,故名思義,就是指標的陣列,陣列的元素是指標 陣列指標,同樣,就是直想陣列的指標。簡單舉例說明 int p 2 首先宣告了乙個陣列,陣列的元素是int型的指標。int p 2 宣告了乙個指標,指向了乙個有兩個int元素的陣列。其實這兩種寫法主要是因為運算子的優先...