指針是與地址分不開的,提到指針就應該想到地址,因為在c語言中指針變量所存放的值就是一個地址,通過這個值它可以指向這個地址的內存位置,也就可以通過這個指針變量來訪問這個內存位置的內容。
定義一個指針變量的方法和其他變量是一樣的:
int *a;
char *b;
...
這裡指針變量a是指向整形的指針,其中a的值是所指向的整形空間的四個字節的第一個字節的地址;b是指向字符型的指針,b的值是這個字符的地址。
對指針的初始化:
int a=123;
int *p=&a;
int *pi;
p=&a;
在這裡定義了整形變量a,定義指針p、pi他們都指向a,上面的兩種初始化方式都使它們指向a。
指針的操作:
通過一個指針訪問它所指向的地址的過程稱作間接訪問或者指針的解引用,它的操作符是*。比如下面的定義
int a=12;
int b;
int *p;
p=&a;
b=*p;
定義指針p它指向變量a,如果想把a的值賦給b,可以通過指針p來操作,對指針p進行解引用*p就可以得到p所指向地址的內容,可以將a的值賦給b。
指針和數組:
數組名的值是一個指針常量,也就是數組第一個元素的地址,這時候對指針進行解引用和對數組進行下標訪問是等價的,我們可以認為下標訪問操作符[ ]和解引用操作符*是可以相互換使用的。
int arr[5]={1,2,3,4,5};
arr[0]的值是1
*arr的值也是1,它相當於*(arr+0)