初探C語言中的指標
IT小菜鳥,年後考研複試要考C,所以寒假就重溫了一下C語言,看到指標這個曾經讓我10分噁心的東東,決定記錄下點東西,一來當成筆記,二來可以幫助一些剛剛入門的小夥伴們深刻理解一下指標這玩意。如果有哪裡說得不對,歡迎大家批評指正。
首先,我們要區分兩個概念。
1 指標
2指標變數
反正我個人學習的時候,這兩個概念就經常弄混,所以,我覺得要想理解指標,就必須嚴格根清這兩個概念。從定義上來看,這兩個東東完全是兩個不同的東西
首先來看指標,指標是個非常抽象的概念。眾所周知,計算機系統的儲存地址是一個遵循一定規則(這個規則我不會,暫時先這麼說,大家原諒一下我的無知)的二進位制數,例如2000,11111,這樣的二進位制數,如果實在感覺我說的陌生,大家可以去找一本《計算機組成原理》看一下,裡面有詳細介紹。那麼話說回來,指標到底是什麼?簡而言之,指標就是
指標變數一定是指標,但是指標不一定是指標變數
接下來,讓我們看一下指標變數。我最想強調的就是最後兩個字,變數!!什麼意思?意思是指標變數和指標是不一樣的啊,指標變數是一個變數啊!變數包括什麼?
包括: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