2
#include<cstdio>
int main() {

int a[5] = {1,2,3,4,5};

int *ptr = (int*)(&a+1);

printf("%d %d" ,*(a+1),*(ptr-1));
}

ここで、a+1 のアドレス位置はポイント ptr に型キャストされます。

私は試してみましたptr = (int )&a それは配列を指しています..ポインターアドレスがいくつかの場所に格納されているため、ポインター ptr はその場所を指しています *ptrを使用して配列要素の場所を参照する方法

プログラムの出力は 2 5 です 5 が出力である理由を説明してください

4

3 に答える 3

2

aは 5 つの int の配列であるため、 は 5つの int の配列へ&aポインタです。ポインター演算は、指定された型のサイズの倍数で動作するため、&a+1は、 に格納されている int の直後にある 5 つの int の架空の配列へのポインターaです。それをintへのポインタにキャストして格納するとptr、その配列の最初のintへのポインタが得られます。

言い換えると、

int *ptr = (int*)(&a+1);

と同等です

int *ptr = (a + 5);

これは*(ptr-1)と同じ*(a+4)a[4]の最後の要素にしaます。

于 2013-07-15T17:39:38.297 に答える
0

配列の名前はアドレスです。したがって&aa同じ値を持ちます。&a同じアドレスに評価されint(*)[size]、単一の要素ではなく、配列へのポインターである型のポインターを作成します。このポインターをインクリメントすると、単一の要素のサイズではなく、配列全体のサイズが追加されます。

于 2013-07-15T17:39:36.967 に答える
-1

int * ptr = &a[0]; ptr は配列の最初の要素を指すようになりました (1) ptr + 1 は 2 を指す、など。

于 2013-07-15T17:36:28.370 に答える