初識C 指標

2021-10-06 22:17:24 字數 2040 閱讀 8041

你可能一直有乙個疑問,計算在儲存資料時如何跟蹤這三個屬性

下面就來看看一種策略,它以指標為基礎,指標是乙個變數,其儲存的是值的位址,而不是值本身。在討論指標之前,我們看看如何找到常規變數的位址。只需對變數應用位址運算子(&),就可以獲得它的位置。

使用常規變數時,值是指定的量,而位址是派生量。

下面來看看指標策略(c++記憶體管理程式設計理念的核心)

指標與c++基本原理

物件導向程式設計和傳統性程式設計的區別在於,oop強調的是執行階段(而不是決策階段)進行決策:即在程式正在執行時。執行階段決策好比度假時,參觀景點取決於你的心情和天天氣,決策階段決策好比不管在什麼條件下,都堅持預先的安排。

執行階段決策提供了靈活性。例如,在宣告陣列時如果一開始就將陣列長度定為20,但程式有時需要處理200個元素,但是宣告200長度的陣列又浪費了記憶體。oop通過將這樣的決策推遲到執行階段進行,使程式更靈活。在執行後,可以這次告訴它需要20個元素,下次告訴它需要200個元素。

為使用這一種方法,語言必須在執行時建立陣列。在c++中使用關鍵字new請求正確數量的記憶體以及使用指標來跟蹤新分配的記憶體位置。

一種特殊的變數——指標用於儲存值的位址。因此,指標名表示的是位址。*運算子被稱為間接值或解除引用運算子,*指標名即為該位址處儲存的值

int updates=6;

int* p_updates;

p_updates =

&updates;

int變數update和指標變數p_updates只不過是一枚硬幣的兩面。變數updates表示值,並使用&運算子獲得位址;變數p_updates表示位址,並使用*p_updates運算子獲得值

int

* pt;

pt =

0xb8000000

;//不行,因為右邊是整數型別

pt =

(int*)

0xb8000000

;//可以,左右兩邊都是整數的位址

指標真正的用武之地在於,在執行階段分配未命名的記憶體以儲存值。在這種情況下,只能通過指標來訪問記憶體。

接下來用new運算子為乙個int值分配未命名的記憶體,並使用指標來訪問這個值。程式設計師要告訴new,需要為哪種資料型別分配記憶體;new找到乙個長度正確的記憶體塊,並返回該位址賦給指標。

int

* pn =

newint

;

int higgens;

int* pt =

&higgens;

第一種情況,只能通過該指標進行訪問。第二種情況可以通過名稱higgens來訪問該int

最後用delete來釋放記憶體,會釋放指標指向的記憶體,但不會刪除指標本身,可以將指標重新指向乙個新分配的記憶體塊。需要與new配對使用。不能用delete釋放宣告變數所獲得的記憶體

int

* psome =

newint[10

];//delete psome;

new返回第乙個元素的位址,然後將位址賦給指標

使用動態陣列

上述指標psome指向10個int值的記憶體塊中的第乙個元素。可以將其看做一根手指。假如int佔4位元組,將手指沿正確方向移動4個位元組,手指會指向第二個元素。而手指的移動範圍就是這10個元素。

那麼問題來了,如何訪問其中的元素呢。第乙個元素就是*psome。

另外的元素可以把指標當做陣列名用即可,第乙個元素psome[0],第二個psome[1]…

但是陣列名和指標還是有著根本的差別

double

* p3 =

newdouble[2

];p3[0]=

0.1;

p3[1]=

0.2;

cout<

cout<<不能修改陣列名的值,但指標是變數,可以修改它的值。

C指標初識

指標是乙個變數,其值為另乙個變數的位址,即,記憶體位置的直接位址。就像其他變數或常量一樣,您必須在使用指標儲存其他變數位址之前,對其進行宣告。指標變數宣告的一般形式為 type var name 在這裡,type是指標的基型別,它必須是乙個有效的 c 資料型別,var name是指標變數的名稱。用來...

C 初識指標

定義乙個指標指向乙個變數的位址 type p var int i int p i 通過 p讀寫i的值 p 10 int a p 用乙個指標指向另乙個指標的位址,不管幾級指標都是指標.type q p char p abc char q p 讀取二級指標的值 printf s n q 等價於 prin...

初識C指標

什麼是指標?type var name int a 乙個整型的指標 double b 乙個 double 型的指標 float c 乙個浮點型的指標 char ch 乙個字元型的指標 所有實際資料型別,不管是整型 浮點型 字元型,還是其他的資料型別,對應指標的值的型別都是一樣的,都是乙個代表記憶體位...