10.2 查詢地址:&運算子

兲涳發表於2020-11-19

指標(pointer)是 C 語言最重要的(有時也是最複雜的)概念之一,用於儲存變數的地址。前面使用的scanf()函式中就使用地址作為引數。概括的說,如果主調函式不使用return返回的值,則必須通過地址才能修改主調函式中的值。接下來,我們將介紹帶地址引數的函式。首先介紹一元&運算子的用法。

一元&運算子給出變數的儲存地址。如果pooh是變數名,那麼&pooh是變數的地址。可以把地址看作是變數在記憶體中的位置。假設有下面的語句:

pooh = 24;

假設pooh的儲存地址是0B76(PC地址通常用十六進位制形式表示)。那麼,下面的語句:

printf("%d %p\n", pooh, &pooh);

將輸出如下內容(%p是輸出地址的轉換說明):

24 0B76

下程式清單中使用了這個運算子檢視不同函式中的同名變數分別儲存在什麼位置。

/************************************************************************
功能:檢視變數被儲存在何處                                                                      
/************************************************************************/
#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;				//mikado()的區域性變數 
	printf("In mikado(), pooh = %d and &pooh = %p\n", pooh,&pooh);
	printf("In mikado(), bah = %d and &bah = %p\n", bah,&bah);
}

程式清單中使用ANSI  C的%p格式列印地址。我們的系統輸出如下:

In main(), pooh = 2 and &pooh = 0039FAC8
In main(), bah = 5 and &bah = 0039FABC
In mikado(), pooh = 10 and &pooh = 0039F9D4
In mikado(), bah = 2 and &bah = 0039F9E8

實現不同,%p表示地址的方式也不同。然而,許多實現都如本例所示,以十六進位制顯示地址。

 

 

 

 

相關文章