間接取值和傳址運算子

間接取值運算子 (*) 透過指標間接存取的值。運算元必須是指標值。運算的結果是運算元 ; 所處理的值 也就是在其運算元所指向的位址的值。結果的型別是解決運算元的型別。

如果運算元指向函式,則結果為函式指示項。如果它指向的儲存位置時,結果會是左值指定的儲存位置。

如果指標值無效,則結果會是未定義的。下列清單包含一些最常見的條件,使指標值無效。

  • 指標是 null 指標。

  • 指標指定本機項目未參考的次顯示的地的址。

  • 指標指定的位址,指到的物件型別並未適當對齊。

  • 指標會指定不執行程式所使用的位址。

傳址運算子 () 提供運算元的位址。傳址運算子的運算元可以是左值,指定的物件,不是位元欄位並不以宣告或函式指示項註冊的儲存類別規範。

地址運算的結果是運算元的指標。指標所討論的類型便是運算元的型別。

傳址運算子只能套用到基本,結構的變數,或在檔案範圍層級上,或者宣告的等位型別 subscripted 陣列參考。在這些運算式中,常數運算式不包含傳址運算子可以加入或減去位址運算式。

範例

下列範例會使用這些宣告:

int *pa, x;
int a[20];
double d;

此陳述式會使用傳址運算子:

pa = &a[5];

傳址運算子 () 會使用陣列的第六個元素的位址a。結果會儲存在指標變數pa。

x = *pa;

間接取值運算子 (*) 可在此範例中,存取int值之地址儲存在pa。將值指派給整數變數x。

if( x == *&x )
    printf( "True\n" );

本範例將列印 word True、 demonstrating,結果將間接取值運算子套用至的地址的x等同於x。

int roundup( void );     /* Function declaration */

int  *proundup  = roundup;
int  *pround  = &roundup;

一次的函式roundup宣告兩個指標roundup宣告和初始化。第一個指標, proundup,初始化時使用的函式的名稱,第二個, pround,使用傳址運算子在初始化。初始設定是相等的。

請參閱

參考

間接取值運算子: 1

傳址運算子: &