C語言 指標

2022-08-18 06:27:10 字數 1546 閱讀 2848

一、什麼是指標

「指標變數」是指用來存放變數位址的變數。指標變數也是乙個變數,它和其他變數的區別在於它裡面存的不是普通的資料,而是另乙個變數的位址。訪問變數有兩種方式,第一種是直接根據變數名稱取到變數的位址,然後去對應記憶體位址拿到變數的值,這種方式叫做「直接引用」;第二種方式是定義乙個指標變數指向變數,從指標變數中拿到變數的位址,再去對應記憶體位址拿到變數的值,這種方式叫做「間接引用」。

二、指標的應用

下面通過幾張來看一下如何用指標表示乙個變數,需要注意的是指標的資料型別必須和它所指向的變數的資料型別相同。

陣列可以儲存一組相同的資料元素,它們在記憶體中占用的是連續的記憶體空間(如下圖所示),所以我們可以通過指標去遍歷或者運算元組。

回文字串是指正序和逆序讀該字串都是一樣的字串,因此可以定義兩個指標,分別指向字元陣列中的第乙個字元和最後乙個字元,然後依次向後或向前取出成對的字元,進行比較,**如下圖所示。

從上面的例子可以看出,通過指標start++、end--,可以遍歷字串中的字元。陣列是佔連續的儲存空間,每個元素所佔得位元組數就是陣列資料型別的位元組數,所以實際上start++移動的位元組數就是陣列中元素所佔的位元組數,那麼指標如何知道元素的資料型別呢?這就回到開頭說到的,定義的指標的資料型別必須和它所指向的變數資料型別相同,換句話說,就是指標只能指向和它定義的資料型別相同的變數。

當我們把某個功能**封裝到函式中時,可以用指標作為引數,也可以用指標作為返回值。比如下圖所示例子。

如上所示,在main函式中,由鍵盤輸入了明文存到乙個字串中,然後呼叫encryption(char *)這個函式完成加密。要加密的內容儲存在陣列中,在呼叫函式的時候,需要將陣列傳入,這裡是用指標來完成的。呼叫函式時傳入的psw是陣列的位址,被指標p_psw接收,稱為指標變數的值,這個時候,就可以說指標p_psw指向了字串陣列的第乙個字元。字串是以『\0』結尾的特殊的字元陣列,所以通過指標++依次遍歷字串中每乙個字元進行加密,直到指標指向『\0』結束標誌。在函式的結尾又將保留的字串的首位址的指標作為返回值返回,實際上返回的p_temp是返回的字元陣列的首位址。回到main函式,定義了乙個新的指標接收返回值,其實就是讓這個新指標p_new指向字串第乙個字元,所以通過puts(p_new)輸出的就是加密之後的字串。

C語言指標

指標變數是包含記憶體位址的變數,它指向記憶體中的一塊區域,通過指標的值,可以間接訪問到相應的記憶體單元的資料,並做相應的修改。1 指標的定義和簡單使用 定義乙個指標變數和定義一般的變數類似,只需在變數名前面加乙個 對乙個指標變數賦值可以用取位址符 來獲取到乙個變數的位址,如果要獲得指標指向的記憶體區...

C語言指標

1 定義指標變數void change int n 格式 變數型別 變數名 定義了乙個指標變數p 指標變數只能儲存位址 指標變數p前面的int 指標變數p只能指向int型別的資料 int main void change int n 2 指標與陣列 陣列名其實質是乙個指標,但是它和普通的指標變數還是...

c語言指標

編寫程式,在主函式裡用指標陣列輸入六個字串,再用另乙個函式對這六個字串排序,並在主函式中輸出排好序的字串。include void sort char s,int n char temp for int i 0 ifor int j 0 jif strcmp s j s j 1 0 temp s j...