指標可以拿來存取電腦的記憶體位址,所以,我們在使用指標變數之前,要先了解何謂記憶體位址。
我們可以把記憶體空間想像成一排大樓的信箱,每一個儲存單位都擁有數字編號的位址,我們如果單純設定變數,其實是把我們要的值放入記憶體空間裡面,所以記憶體裡面的值可以改變,但是記憶體位址是固定的。(可以想成一棟房子的地址是固定的,但裡面住的人可以改變、可以搬家)
看個例子:
如果我們程式碼寫成 int X = 38;
假設這個變數會被配置於 0x7ffff34fff00 的位址
畫成圖來表示:
從上面的圖很明顯的可以知道,我們宣告了一個變數 X
,其值為 38,然後我們配置了 4 bytes 的記憶體給他(通常宣告int
需要 4 bytes)
我們可以使用 C 語言的 &
取址運算子來取得變數記憶體位址。
來看一下程式碼:
#include<stdio.h>
int main(){
int x = 38;
printf("變數x的值 = %d\n", x);
printf("變數x的位址 = %p\n", &x);
return 0;
}
輸出結果如下:
我們透過程式輸出可以看到,變數的值與位址的差別!
還記得在第七天 C 的輸入輸出函式有提到 scanf()
函式,其逗號後面我們要用 &
再加上變數名稱嗎?
其實是因為 scanf()
函式後面必須傳入地址,所以才要加上 &
去取址,但如果是傳入陣列的話,就不需要用 &
(陣列其實是宣告第一個陣列位址)!
我們來看一個程式例子:
#include<stdio.h>
int main(){
int arr[3] = {0};
int i = 0;
printf("請輸入一個變數 >>");
scanf("%d", arr+2);
for(i=0; i<3; i++)
printf("%d ", arr[i]);
return 0;
}
輸出結果:
程式碼解釋:
arr[0]
)。可以看到,我們輸入的變數真的被放入 arr[2]
裡面了!
今天講了指標最基本的一些小東西,但其實指標的概念還有好多好多,所以明天要繼續介紹~