指標(初學者)
1、地址和指標的概念
(1)地址
記憶體區的每一個位元組都有一個編號,這就是“地址”。如果在程式中定義了一個變數,在對程式進行編譯時,系統就會給這個變數分配記憶體單元。
在C語言中,對變數的訪問有兩種方式:直接訪問和間接訪問。
直接訪問:如:a=5;
系統編譯時,已經對變數分配了地址,例如:若變數a分配的地址是2000,則該語句的作用是把把常數儲存到地址為2000的單元。
間接訪問:如:scanf("%d",&a);
呼叫函式時,把變數a的地址傳遞給函式scanf,函式先把該地址儲存到一個單元中,然後把從鍵盤接收的資料通過所儲存的地址儲存到a變數中。
(2)指標
在C語言中,指標是一種特殊的變數,它是存放地址的。假設我們定義了一個指標變數int*i_pointer;可以通過語句:i_pointer=&i;來存放整型變數i的地址。
2、操作符
*:取值操作符。
&:取值操作符。
如:int i=2000;
int *pointer; /*此處的*並非取值,只是表示一個特徵*/
pointer = &i;
printf("%d\n",*pointer); /*此處取值*/
3、指標與指標變數
知道了一個變數的地址,就可以通過這個地址來訪問這個變數,因此,又把變數的地址稱為變數的“指標”。
C語言可以定義一類特殊的變數,這些變數專門用來存放變數的地址,稱為指標變數。
指標變數的值(即指標變數中存放的值)是地址(即指標)。注意區分“指標”與"指標變數"這兩個概念。
(1)定義一個指標變數“*”。
例:float*pointer_3;/*pointer_3是指向float型變數的指標變數*/
char*pointer;/*pointer_4是指向字元型變數的指標變數*/
可以用賦值語句使一個指標變數得到另一個變數的地址,從而使它指向一個該變數。
注:a、指標變數前的“*",表示該變數的型別為指標型變數,其一般形式為:型別說明符 *變數名;
其中,*表示這是一個指標變數,變數名即為定義的指標變數名,型別說明符表示本指標變數所指向的變數的資料型別。
例:float*pointer_1;
指標變數名是pointer_1,而不是*pointer_1。
b、在定義指標變數時必須指定基型別。值得注意的是·,只有整型變數的地址才能放到指向整型變數的指標變數中。
(2)指標變數的引用”&“。
指標變數中只能存放地址(指標),不要將一個整數(或任何其他非地址型別的資料)賦給一個指標變數,否則,編譯器也會把該值當成一個地址來處理。
C語言中提供了地址運算子&來表示變數的地址。
其一般形式為:&變數名;
注:變數本身必須預先宣告。
例:通過指標變數訪問針型變數
#include<stdio.h> void main() { int a,b; int *pointer_1,*pointer_2; a=100; b=10; pointer_1=&a; pointer_2=&b; printf("%d,%d\n",a,b); printf("%d,%d\n",*pointer_1,*pointer_2); }