指針基礎
一、什麼指針[ps:地址=指針]
1、什麼地址:
內存區的每一個字節都有一個編號,這就是“地址”
2、直接訪問和間接訪問
分水嶺:指針
間接訪問:即,將變量i的地址存放在另一個變量中。
二、什麼是指針變量
存放地址的變量
定義:
基類型 *指針變量名;
備註:
1、基類型->指針變量所指變量的數據類型
2、“*”表示所定義的變量是指針變量
3、變量名是ptr,而非*ptr
例子:
int *ptr;
p_ws/pWs
使用:不能直接給一個指針變量賦值爲整形
1、通過&運算符賦值
p_var= &var;
2、通過另外一個指針變量賦值
p_var1= p_var2;
3、通過NULL賦值
p_var1= NULL;代表空指針
備註:
&:取地址(&是一元運算符,它返回操作數的內存地址)
*:取值(*是 &的反運算符,它也是一元運算符,返回指針指向的內存位置中的值)
優先級和結合方向:“&”和“*”兩個運算符的優先級別相同,但按自右而左方向結合
int*p_var1 = &a, *p_var2 = &b;
備註:
p_var:代表指針變量
*p_var:指針變量所指的變量
p_var1= &*p_var2; -> p_var1 = &b;
p_var1= *&p_var2;
*p_var1++和 (*p_var)++區別
int a = *p_var1++:
1、取得*p_var1的指
2、p_var1指針加1
指針的算數運算:
指針±整數 或者 指針 -指針
指針±整數:代表指針(+)向後偏移x位(根據指針數據類型),(-)向前偏移x位
指針 - 指針:代表兩個指針變量的內存距離
備註:指針 + 指針 錯誤
指針的作用:
- 使程序簡潔、緊湊、高效
- 有效地表示覆雜的數據結構
- 動態分配內存
- 得到多於一個的函數返回值
三、什麼是數組指針
數組指針:
是指數組的起始地址,也就是第一個元素的地址。數組的指針是個常量指針。
指針數組:
是指一個數組,裏面的元素類型都是指針
因爲:數組名是數組的首地址 == 數組名就是數組的指針所以:可以像操作指針那樣操作數組名
例子:
int ary[] = {1,2,3,4,5,6,7,8,9,10};
ary+ 2 -> &ary[2]
&ary[2]-> &(*(ary + 2))
四、什麼是字符串指針
字符串指針(指向字符串的指針)C語言中沒有特定的字符串類型,
我們通常是將字符串放在一個字符數組中。
字符數組和字符串指針的區別:
字符數組存儲在全局數據區或棧區,字符串存儲在常量區。
全局數據區和棧區的字符串(也包括其他數據)有讀取和寫入的權限,
而常量區的字符串(也包括其他數據)只有讀取權限,沒有寫入權限。
例子:
#include <stdio.h>
int main()
{
char *str = "Hello World!";
str = "I love C!"; //正確
str[3] = 'P'; //錯誤
return 0;
}