C 速查手冊- 6.1 指標 - 程式語言教學誌
文章推薦指數: 80 %
C 語言的指標(pointer) 是用來指向儲存指向某個記憶體位址的資料型態(data type) ,實際上我們須認識電腦管理記憶體好比一個長列,每一列都有以位元編碼的位址,每一位 ...
C速查手冊
6.1指標
C語言的指標(pointer)是用來指向儲存指向某個記憶體位址的資料型態(datatype),實際上我們須認識電腦管理記憶體好比一個長列,每一列都有以位元編碼的位址,每一位址都可儲存位元編碼的資料,示意圖如下
0000▭▭▭▭
0001▭▭▭▭
0010▭▭▭▭
0011▭▭▭▭
0100▭▭▭▭
0101▭▭▭▭
0110▭▭▭▭
0111▭▭▭▭
1000▭▭▭▭
↓ ↓
位址 內容
例如,我們宣告並指派初值22給整數變數(variable)a,編譯器(compiler)將變數a放在0011的記憶體位址裡,稍後我們再宣告另一個指向a的指標變數aPtr,假設編譯器aPtr放在0111的記憶體位址裡,如下圖所示
0000▭▭▭▭ 45
0001▭▭▭▭ 98
0010▭▭▭▭ 509
0011▭▭▭▭ 22 a
0100▭▭▭▭1234
0101▭▭▭▭ 0
0110▭▭▭▭ 382
0111▭▭▭▭0011aPtr
1000▭▭▭▭9000
↓ ↓ ↓ ↓
位址 內容 數值 變數
其他記憶體位址的數值可能為殘值,意思是如果沒有被程式利用,就對程式沒有用處。
因此,指標變數aPtr的內容為變數a的記憶體位址,如下
0000▭▭▭▭ 45
0001▭▭▭▭ 98
0010▭▭▭▭ 509
0011▭▭▭▭ 22 a
0100▭▭▭▭1234 ↖
0101▭▭▭▭ 0 ↑
0110▭▭▭▭ 382 ↑
0111▭▭▭▭0011aPtr↗
1000▭▭▭▭9000
↓ ↓ ↓ ↓
位址 內容 數值 變數
宣告C語言的指標變數,格式如下
datatype*name;
*為宣告指標所用的運算子(operator),注意這跟乘法運算子一樣,編譯器會依上下文判斷星號用為宣告指標,還是用為兩數相乘。
很多情況下我們都需要直接操作記憶體位址,例如提升程式執行效率與建立資料結構。
C語言中使用指標需要先經過宣告,如下列程式建立一個指標變數aPtr指向變數a
#include
這兩行可以合併寫成
int*aPtr=&a;
印出指標變數的一行
printf("利用指標指向變數*aPtr=%d\n",*aPtr);
指標變數使用時另加上的星號*,稱為間接運算子或反參考運算子,這是用來取得該指標所指向的數值,而非記憶體位址。
下列程式依次印出變數a的值與記憶體位址、aPtr的值與所參考的數值
#include
最後把暫存變數temp的值,也就是aPtr原先所儲存的值給bPtr,兩數的值便做了對調。
由於陣列(array)名稱就是指標,字串(string)也就是字元(character)陣列常常直接利用指標來操作,如下例
#include
下面的while迴圈(loop)
while(*aPtr!='.'){
printf("%c\n",*aPtr);
aPtr++;
}
這裡利用迴圈逐行印出每個字元。
此外注意指標也是可以進行計算的,但有其限制,合法的指標運算如下表
相同資料型態的指標才可互相指派;
指標可相加或相減某一範圍的整數;
指向相同陣列的指標可以相減或比較;
指標可以指派0或是與0做比較。
關於在結構中使用指標,請參考C語言的結構,另有指向函數的指標,請參考函數指標。
上一頁單元6-衍生資料型態
回C速查手冊首頁
下一頁6.2陣列
回C教材首頁
回程式語言教材首頁
延伸文章資訊
- 1你所不知道的C語言:指標篇 - HackMD
The construction of a pointer type from a referenced type is called ''pointer type derivation''. ...
- 2指標與位址
int *n; float *s; char *c;. 雖然宣告指標時,C 習慣將 * 前置在變數名稱前,不過 n 的型態是 ...
- 3第5章、陣列和指標 - C/C++
指標(pointer)是一種用來指示資料存在於記憶體中的位址標示器,其宣告方式為資料型別*變數名稱; 資料型別通常是基本的資料型別,如int, float, char等,變數名稱與一般變數 ...
- 4C語言筆記— 指標(Pointers)
指標這個觀念是「陣列、字串、資料結構、演算法」的基礎,之後使用他們時,指標在裡面有很大的作用。 指標也算是一種變數,只是裡面存的不是一般的「數字 ...
- 5C語言: 超好懂的指標,初學者請進~ - 寫點科普Kopuchat
等等,那C 語言中的指標是長什麼樣子? 讓我們來看看這段程式碼: void main(){ int a = 15; int b = 2; int c = 39; ...