C語言之指標筆記(1)
阿新 • • 發佈:2018-11-21
指標(pointer)是C語言中最重要的概念之一,用於儲存變數的地址。
1.&運算子
(1)一元&運算子可給出變數的儲存地址。如過pooh是變數名,那麼&pooh是變數地址。
(2)如下例所示,使用運算子檢視不同函式中的同名變數儲存在什麼位置。
原始碼:
//檢視變數被儲存在何處
#include <stdio.h>
void mikado(int); //函式原型
int main(void)
{
int pooh = 2, bah = 5; //main()的區域性變數
printf("In main(), pooh = %d and &pooh = %p\n" , pooh, &pooh);
printf("In main(), bah = %d and &bah = %p\n", bah, &bah);
mikado(pooh);
return 0;
}
void mikado(int bah) //定義函式
{
int pooh = 10;
printf("Int mikado(),pooh = %d and &pooh = %p\n", pooh, &pooh);
printf("In mikado(), bah = %d and &bah = %p\n", bah, & bah);
}
(3)執行結果:
可以看出,兩個pooh和bah的地址不同,在計算機中,它們是四個獨立的變數,具有不同的地址。
2.指標簡介
從根本上說,指標是一個值為記憶體地址的變數。如int型別的變數的值是整數,指標變數的值是地址。
假設一個指標變數名是ptr,那麼可以編寫如下語句:
ptr = &pooh; //吧pooh的地址賦給ptr
對於這條語句,我們說ptr“指向”pooh。ptr和&pooh的區別是ptr是變數,而&pooh是常量。
(1)間接運算子:*
假設ptr指向bah,使用間接運算子(indirection operator)找出儲存在bah中的值。
ptr = &bah;
val = *ptr; //找出ptr指向的值
相當於
val = bah;
(2)宣告指標
宣告指標變數必須指定指標所指向變數的型別,因為不同的變數型別佔用不同的儲存空間。此外,程式必須知道儲存在指定地址上的資料型別。例如:
型別說明符表明了指標所指向物件的型別,型號()表明宣告的變數是一個指標。intpi;宣告的意思是pi是一個指標,pi是int型別。
(3)使用指標在函式間通訊
交換兩個變數的值。
原始碼:
//使用指標解決交換函式的問題
#include <stdio.h>
void interchange(int * u, int * v);
int main(void)
{
int x = 5, y = 10;
printf("Oringinally x = %d and y = %d.\n", x, y);
interchange(&x, &y); //把地址傳送給函式
printf("Now x = %d and y = %d.\n", x, y);
return 0;
}
void interchange(int * u, int * v)
{
int temp;
temp = *u; //temp獲得u所指物件的值
*u = *v;
*v = temp;
}
其中,interchange(&x, &y)傳遞的是x和y的地址。
執行結果:
參考文獻:C Primer Plus