Aと違い&

我々は配列aを定義するとき、コンパイラは、要素と要素の指定された数のメモリ割り当てのタイプに応じてサイズ(要素型サイズの要素数*)を決定し、このメモリの名前です。試合の名前を持つこのメモリたら変更することはできません。[0]、[1]の要素Aとして、しかし名が要素ではありません。配列の各要素には名前ではありません。

ここ&[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へのポインタです。

 

おすすめ

転載: www.cnblogs.com/linux-bfbdxj520/p/11404636.html