C語言入門第十三篇,指針

指針是以一種靈活的方式來表示變量或者說數據。他只是一個很基礎的東西,我們初學它的時候都會覺得很難很抽象,然而後面的大多數地方都會用到指針,然後會有一種看見指針望而卻步的感覺,這是我自己的切身感受,但是其實指針並不是C語言的難點,需要的只是多寫些代碼就會了。

地址
前面說內存的時候也給大家有意無意的提到了這點,我們的變量全部都是在內存中,而內存是一個有很多房間的酒店,每個房間有不同的房間號,這個房間號就是地址。內存被一塊一塊的分成了很多,當我們的變量存儲在內存中時,就有一個地址“編號”。(這個比喻其實並不是很恰當,但是我們可以先這樣理解)並且這個編號是獨一無二的。

所以我們的每個變量都會有一個地址,而我們今天說的指針就是利用地址來訪問變量的一種變量(指針變量)。

指針的形式簡單,就是在我們前面講的變量聲明的時候加上*(星號)。

int *a;//指向整型變量a的指針
float *b;//指向單精度浮點數變量b的指針
char *c;//指向字符變量c的指針

我們怎麼初始化一個指針呢?

int *a;
int b=5;
a=&b;

我們前面講了&取地址這個符號,目的是取b這個變量的地址賦值給a。然後*a便是指向5這個變量。所以這裏要明白a是地址,*a是指針變量(是一個具體的變量值)。
指針變量

上圖表現了上述的關係。

其實指針的基本語法也就這樣。大家肯定還是覺得簡單,但是看看下面這個呢?

int a;
*&a=25;

上面這段代碼的意思是什麼呢?如果你能明白的話,你就已經明白指針了。他是將25賦值給a,但是在真正的編程的時候誰都不會這樣做,這裏只是讓你更加明白指針。

注意事項:
指針變量初始化時,只能通過賦值地址,不能將值賦值給它。

int *a=12;

上面這種做法是錯誤的。因爲指針變量a並不知道12這個地址是什麼,能不能訪問(但是c語言語法是允許這樣做的,但是千萬不要這樣做)。

int a;
int *b=&a;

上面的代碼就是對的。

指針的指針

首先我們必須要知道指針變量,它也是一個變量,所以也會有一個地址來存儲它,也就是說指針變量也有地址。

那麼指針的指針就是指向指針變量地址的指針

int **c;

聲明方式如上。我們再來看看初始化:

    int *a;
    int b=5;
    int **c;
    a=&b;
    c=&a;

指針的指針
上圖表現了指針的指針。

這裏先介紹一些基本的東西,首先會用,然後我們再慢慢深入。後面在具體的編程環境裏面再慢慢體會。

既然有指針的指針,那當然也有指針的指針的指針。定義也是類似的,只是我們很少去用了,也根本不太會用上。

指針的運算
指針變量是變量,只要是變量就可以進行加減,以及前面所說的所有操作符。
我們把指針變量,當做普通的變量來進行操作。

int *a;
……
a+=1;
a-=1;
a++;
a--;

指針運算

通過上圖我們可以看看指針的運算,右邊是假設的地址,通過加減運算指針可以任意訪問上面的地址。
當然這個是有點抽象,後面我們講數組和指針的關係的時候慢慢討論這個。

總結
指針是通過地址訪問變量的一種變量。地址的操作更加接近底層,後面我們也會體會到指針的靈活性,本篇主要講述指針的一些基礎東西。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章