“指針變量”是指用來存放變量地址的變量。指針變量也是一個變量,它和其他變量的區別在於它裡面存的不是普通的數據,而是另一個變量的地址。訪問變量有兩種方式,第一種是直接根據變量名稱取到變量的地址,然後去對應內存地址拿到變量的值,這種方式叫做“直接引用”;第二種方式是定義一個指針變量指向變量,從指針變量中拿到變量的地址,再去對應內存地址拿到變量的值,這種方式叫做“間接引用”。
二、指針的應用下面通過幾張圖片來看一下如何用指針表示一個變量,需要注意的是指針的數據類型必須和它所指向的變量的數據類型相同。
數組可以存儲一組相同的數據元素,它們在內存中占用的是連續的內存空間(如下圖所示),所以我們可以通過指針去遍歷或者操作數組。
回文字符串是指正序和逆序讀該字符串都是一樣的字符串,因此可以定義兩個指針,分別指向字符數組中的第一個字符和最後一個字符,然後依次向後或向前取出成對的字符,進行比較,代碼如下圖所示。
從上面的例子可以看出,通過指針start++、end--,可以遍歷字符串中的字符。數組是占連續的存儲空間,每個元素所占得字節數就是數組數據類型的字節數,所以實際上start++移動的字節數就是數組中元素所占的字節數,那麼指針如何知道元素的數據類型呢?這就回到開頭說到的,定義的指針的數據類型必須和它所指向的變量數據類型相同,換句話說,就是指針只能指向和它定義的數據類型相同的變量。
當我們把某個功能代碼封裝到函數中時,可以用指針作為參數,也可以用指針作為返回值。比如下圖所示例子。
如上所示,在main函數中,由鍵盤輸入了明文存到一個字符串中,然後調用encryption(char *)這個函數完成加密。要加密的內容存儲在數組中,在調用函數的時候,需要將數組傳入,這裡是用指針來完成的。調用函數時傳入的psw是數組的地址,被指針p_psw接收,稱為指針變量的值,這個時候,就可以說指針p_psw指向了字符串數組的第一個字符。字符串是以‘\0’結尾的特殊的字符數組,所以通過指針++依次遍歷字符串中每一個字符進行加密,直到指針指向‘\0’結束標志。在函數的結尾又將保留的字符串的首地址的指針作為返回值返回,實際上返回的p_temp是返回的字符數組的首地址。回到main函數,定義了一個新的指針接收返回值,其實就是讓這個新指針p_new指向字符串第一個字符,所以通過puts(p_new)輸出的就是加密之後的字符串。