int i, paneerRoll[5]={89,45,35,2,3};
printf("Element \t Address \t\t Value\n");
for(i=0; i<5; i++)
{
printf("paneerRoll[%d] \t %p \t %d\n",i,&paneerRoll[i],paneerRoll[i]);
}
printf("\n\n\npaneerRoll \t %p \t %d\n",&paneerRoll,*paneerRoll);
printf("(paneerRoll+2) \t %p \t %d",&paneerRoll+2,*(paneerRoll+2));
この部分のために
printf("(paneerRoll+2) \t %p \t %d",&paneerRoll+2,*(paneerRoll+2));
私の出力は
**(paneerRoll + 2)000000000061FE08 35 **
これは、配列のどの要素のメモリ位置とも等しくありません。 それで、このアドレス指定は何ですか?
回答 1 件
関連記事
- オブジェクトの配列をループして、特定のキー/値フィールドにアクセスします
- golangでstruct型の2次元配列を初期化してアクセスします
- 警告:bool型の値で配列オフセットにアクセスしようとしています
- 2D配列の作成中に、どこでメモリを解放しますか? valgrindエラー
- すべてのメンバーに割り当てられたメモリを使用して、ヒープ上に構造体の配列を作成します
- Cuda GPUassert:不正なメモリアクセスが発生しました
- C ++:最初と最後の要素が同じメモリアドレスを持つ2つの配列があります
- メモリアクセス違反
- 別の関数で非同期に作成されたグローバルデータ配列にアクセスするにはどうすればよいですか?
- useReducerを使用して配列オブジェクトのサブオブジェクトにアクセスする方法
C標準から(6.3.2.1左辺値、配列、および関数指定子)
したがって、この式では
配列指定子
paneerRoll
配列の最初の要素へのポインタに変換されます。表現paneerRoll + 2
配列の3番目の要素を指します。式の間接参照*(paneerRoll+2)
配列の3番目の要素の左辺値を取得します。この表現は
次に、部分式
&paneerRoll
タイプがありますint ( * )[5]
配列が占めるメモリエクステントのアドレス(配列の最初の要素のアドレスと同じアドレス)の値を持ちます。式を使用する
次のように計算されたアドレスを取得します
( char * )paneerRoll + 2 * sizeof( int[5] )
割り当てられた配列から遠く離れている