アドレス演算子と間接
間接演算子 ()* はポインターを介して値を間接的にアクセスします。オペランドはポインター値である必要があります。この演算の結果はオペランドによって対応しています ; 値つまりオペランドが指すアドレスの値。結果の型はその型のアドレスです。
関数のオペランドの点は関数呼び出しの結果。は格納場所を指す場合結果は格納場所を指定する左辺値です。
ポインターの値が無効な場合、結果は未定義になります。次の一覧はポインター値を無効にする共通の条件の一部が含まれています。
ポインターが null ポインターです。
ポインターが参照時に表示されていないローカル項目のアドレスを指定します。
不正なポインターが指すオブジェクトの種類に配置されているアドレスを指定します。
ポインターは実行プログラムで使用されていないアドレスを指定します。
アドレス演算子 () ではオペランドのアドレスを示します。アドレス演算子のオペランドは関数呼び出しまたはビット フィールドではなく 登録 " ストレージ クラスの指定子と宣言されていないオブジェクトを指定する左辺値を指定できます。
アドレス演算子の結果はオペランドへのポインターです。ポインター アドレスによって型はオペランドの型です。
アドレス演算子のみ基本ファイル スコープのレベルで宣言されたまたは配列 subscripted を参照することはできませんが構造体または共用体型で変数に適用できます。これらの式ではアドレス演算子を含まない定数式がに追加されるかアドレス式を減ずることができます。
例
次の例ではこれらの宣言を使用して :
int *pa, x;
int a[20];
double d;
このステートメントはアドレス演算子を使用して :
pa = &a[5];
アドレス演算子 () a 配列の 6 番目の要素のアドレスです。結果は pa ポインター変数に格納されます。
x = *pa;
この例で * 間接演算子 () が pa に格納されているアドレスで int の値にアクセスするために使用されます。値は整数変数 x に割り当てられます。
if( x == *&x )
printf( "True\n" );
この例では x のアドレスへの間接演算子を適用した結果が x と同じであることを示す Word True を出力します。
int roundup( void ); /* Function declaration */
int *proundup = roundup;
int *pround = &roundup;
一度 roundup 関数が宣言されています roundup への 2 回のポインターを宣言し初期化します。proundup最初のポインターは関数名のみを使用して2 番目pround の初期化のアドレス演算子を使用します。初期化は同じです。