1. 程式人生 > >初探C語言中的指標

初探C語言中的指標

IT小菜鳥,年後考研複試要考C,所以寒假就重溫了一下C語言,看到指標這個曾經讓我10分噁心的東東,決定記錄下點東西,一來當成筆記,二來可以幫助一些剛剛入門的小夥伴們深刻理解一下指標這玩意。如果有哪裡說得不對,歡迎大家批評指正。


首先,我們要區分兩個概念。

1 指標

2指標變數

反正我個人學習的時候,這兩個概念就經常弄混,所以,我覺得要想理解指標,就必須嚴格根清這兩個概念。從定義上來看,這兩個東東完全是兩個不同的東西

首先來看指標,指標是個非常抽象的概念。眾所周知,計算機系統的儲存地址是一個遵循一定規則(這個規則我不會,暫時先這麼說,大家原諒一下我的無知)的二進位制數,例如2000,11111,這樣的二進位制數,如果實在感覺我說的陌生,大家可以去找一本《計算機組成原理》看一下,裡面有詳細介紹。那麼話說回來,指標到底是什麼?簡而言之,指標就是

(儲存)地址,計算機內部任何一個地址都可以叫做指標,換句話說,指標是C語言對儲存地址的另一種說法(專業的),在具體點,指標是一個二進位制數,代表一個計算機內部儲存地址。

指標變數一定是指標,但是指標不一定是指標變數


接下來,讓我們看一下指標變數。我最想強調的就是最後兩個字,變數!!什麼意思?意思是指標變數和指標是不一樣的啊,指標變數是一個變數啊!變數包括什麼?

包括:1變數名   2變數值  3變數型別 4變數值

接下來,我們要了解兩個操作符

*:取操作符,操作物件是地址,也就是指標,通過地址查到所對應的值

&:取地址操作符,操作物件是變數,通過變數名取得變數的地址

大家一定要記清楚這兩個操作符的作用!!特別是 * ,千萬不要和後面指標變數定義中的 * 混為一談!為了加深大家的理解,我們通過幾個簡單的C語言語句給大家解釋一下。

首先寫一個C語言語句:

int i=1;

在這個語句中,我們進行了一個變數的宣告和賦值。具體分析如下:

變數名:i         變數型別:int(整形)     變數值:1    變數地址:(假設是這個地址)20000

好,那麼我們就對  i   這個變量了解的很充分了,接下來分析另外一句話。

int i=1;(假設i的地址是20000)

int *p=&i;    //指標變數定義

拋去int i =1;不看,我們看 int *p = &i;  分析:

變數名:p   變數型別:int型指標    變數值:20000 變數地址:(假設)22000

這樣看來,就很簡單明瞭,語句的作用就是定義一個int型指標的變數p,也就是我們俗稱的(int型)指標變數,通過&操作符得到變數 i 的地址,將這個地址賦值給 p ,之後我們就可以通過指標變數 p(已獲得i的地址)來訪問 變數i了。

最後還要再說一句,int *p=&i;中的   *  不是取值操作符,這時候的 * 可以理解為一個關鍵字,和int共同構成變數型別int*,即整型指標。那什麼時候是取值操作符呢?

例如  printf("%d\n",*p);       

通過前面我們知道,p的值是變數  i   的地址,那麼*的作用就從p所代表的的地址中取出地址對應的值,所以被叫做取值操作符··

至於指標的好處之類的我就不贅述了,畢竟我覺得指標的難點就是這了。最後貼上完整程式碼和執行結果;

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i=200;//定義int型變數,值為200
    int *p;//定義int型指標變數p
    p=&i;//將變數i的地址賦給p
    printf("變數i的值:%d\n",*p);//通過取值操作符*得到i的值
    return 0;
}

執行結果:

變數i的值:200