1. 程式人生 > >C語言之指標筆記(1)

C語言之指標筆記(1)

指標(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