ここ&[0]&A、最後にそれがどのような違いを作るのですか?[0]であるが&[0]と同じ値ではなく、同じ意味、アレイ全体で、要素です。前者は、配列の最初のアドレスである配列要素の最初のアドレスです。そして、アクセス対象は、オフセットユニットの数を覚えて、フォームのポインタにアクセスし、新しいアドレスの計算に間違えていない、バイト要素の数ではありません。
次の例を見てください:
書式#include <iostreamの>
名前空間stdを使用。
メインint型()
{
INT [5] = {1,2,3,4,5}。
INT * PTR =(INT *)(&A + 1)。
printf( "%dを、%のD"、*(A + 1)*(PTR-1))。
システム(「一時停止」)。
0を返します。
}
回答:2.5
解像度:
INT * PTR =(INT *)(&A + 1);&Aは、アレイは、ポインタの先頭アドレスは、元のアドレス値はとても&A +に直接適用し、それによって次の要素のアドレスを取得する、しない増分されます1&Aは、最初のアドレス+ 5 *はsizeof(INT)と比較して、明らかに現在のポインタは、配列の範囲を超えています。前のステップで計算されたアドレスは、int型*、割り当てられたPTR型にキャストします。
*(A + 1);、&値aは同じであるが、意味は同じです。最初のアドレスは、即ち、配列の最初の要素である[0]、A + 1は、配列要素の最初のアドレス最初のアドレスである、すなわち、[1]、&A + 1次配列の最初のアドレスです。出力2
*(PTR-1); PTR [5]のように点、およびint型の*のPTRであるので*(PTR-1)[4]、出力5へのポインタです。
ここ&[0]&A、最後にそれがどのような違いを作るのですか?[0]であるが&[0]と同じ値ではなく、同じ意味、アレイ全体で、要素です。前者は、配列の最初のアドレスである配列要素の最初のアドレスです。そして、アクセス対象は、オフセットユニットの数を覚えて、フォームのポインタにアクセスし、新しいアドレスの計算に間違えていない、バイト要素の数ではありません。
次の例を見てください:
書式#include <iostreamの>
名前空間stdを使用。
メインint型()
{
INT [5] = {1,2,3,4,5}。
INT * PTR =(INT *)(&A + 1)。
printf( "%dを、%のD"、*(A + 1)*(PTR-1))。
システム(「一時停止」)。
0を返します。
}
回答:2.5
解像度:
INT * PTR =(INT *)(&A + 1);&Aは、アレイは、ポインタの先頭アドレスは、元のアドレス値はとても&A +に直接適用し、それによって次の要素のアドレスを取得する、しない増分されます1&Aは、最初のアドレス+ 5 *はsizeof(INT)と比較して、明らかに現在のポインタは、配列の範囲を超えています。前のステップで計算されたアドレスは、int型*、割り当てられたPTR型にキャストします。
*(A + 1);、&値aは同じであるが、意味は同じです。最初のアドレスは、即ち、配列の最初の要素である[0]、A + 1は、配列要素の最初のアドレス最初のアドレスである、すなわち、[1]、&A + 1次配列の最初のアドレスです。出力2
*(PTR-1); PTR [5]のように点、およびint型の*のPTRであるので*(PTR-1)[4]、出力5へのポインタです。