變數 指標 地址
- 地址是資料(變數)儲存的位置,地址也是資料。
- 存放地址的變數叫指標變數,簡稱指標。
指標變數的大小
- 在 \(32\) 位作業系統上地址用 \(32\) 位二進位制整數表示,所以一個指標的大小為 \(4\) 位元組;
- 在 \(64\) 位作業系統上地址用 \(64\) 位二進位制整數表示,所以一個指標的大小為 \(8\) 位元組。
指標的型別
可以有不同型別的指標,對應的地址大小不同,例如可以有int
型別的指標對應 \(32\) 位空間的地址,也可以有char
型別的指標,同理對應 \(8\) 位空間的地址。
指標的宣告與使用
對於變數
- 指標的型別為型別名後加上一個
*
號,如int*
; - 取得一個變數的地址可以使用取地址符
&
; - 如果要訪問指標指向的空間使用
*
號;
int a=1;
int* aa=&a;
*aa=2;//和a=2一樣的功能
對於結構體
- 可以用
.
實現對結構體成員的訪問,也可以用->
。形象「箭頭」
struct note{
int id;
char w;
}a{1,'a'},b{2,'b'};
int main(){
note* tmp=&a;
(*tmp)=b;//a{2,b}
(*tmp).id=1;//a{1,b}
tmp->w='a';//a{1,a}
return 0;
}
指標的偏移
指標可以和整數進行加減操作,作用是使其指向的地址偏移,具體偏移量與指標型別有關:如int
型指標每加 \(1\) 指標偏移 \(32\) 位,加 \(2\) 偏移 \(2 \times 32 = 64\) 位;對於其他型別同理。
使用指標偏移訪問陣列
- 陣列是一塊連續的儲存空間,直接使用陣列名可以得到陣列的起始位置即
arr[0]
的地址。 - 用指標訪問陣列中的元素時可以透過陣列起始地址加上偏移量來訪問。