ポインタは正確に何を保存するのでしょうか?(C++)
質問
ポインターが指す値のアドレスを格納することはわかっていますが、ポインターの値を画面に直接表示すると、16 進数が取得されます。数値がポインタに格納されているものとまったく同じである場合、次のように言うと、
pA = pB; //both are pointers
アドレスをコピーしているのです。そうすると、次のような非常に小さなアイテムを操作するときにポインターを使用すると、オーバーヘッドが大きくなりませんか? int
砂 bool
は?
解決
ポインタは、本質的にわずか数です。これは、データがRAMのアドレスを格納します。ポインタ自体はかなり小さい(32ビットアーキテクチャにint
としておそらく同じサイズ、64ビットにlong
)である。
あなたはint *
sでの作業時int
は、任意のスペースを節約しないことけれども正しいです。しかし、それは(しゃれが意図していない)の点ではありません。ポインタは、あなたは、の参照のものにだけではなく、のものを使用するが持つことができているので、の自分ます。
他のヒント
メモリアドレスます。
これは他のものののです。
メモリ内の場所でありますポインタは一般に、プロセッサのワードサイズであるので、それらは一般的に単一の命令サイクル内で移動することができます。要するに、彼らは高速です。
は、ポインタは「わずか数」はメモリアドレスを格納するが、それは抽象化である。それは、複数の数値とすることができるプロセッサのアーキテクチャに応じて、例えば塩基を、それがに追加されなければならないオフセットポインタを間接参照。この場合、オーバーヘッドは、アドレスが単一の数である場合よりもわずかに高い。
はい、プロセッサはレジスタに変数を置くことができ、直接ポインタ対を介してintまたはブール値にアクセスする際のオーバーヘッドがあります。任意のオーバーヘッドを上回る間接の値、即ち、アレイを横切る場所ポインタが通常使用されている。
私は、時間のオーバーヘッドを参照してきました。 OPはもっと心配スペースや時間のオーバーヘッドだったかどうかわからない。
数は、メモリ内のそのアドレスを指します。追加のオーバーヘッドは、他のプリミティブ型と比較して存在しないので、ポインタのサイズは、典型的には、コンピュータのアーキテクチャのネイティブなサイズです。
は、いくつかのアーキテクチャ上の文字へのポインタの追加のオーバーヘッドがあります。文字へのポインタは、従って、ワードアドレスとして格納され、その単語内の文字のオフセット。ポインタを参照解除することは、文字を抽出する値の言葉をフェッチして、シフトとマスキングが含まれます。
メモリ内のアドレス。どこかにポイント! : - )
基本的なことから始めましょう。まず、変数とは何か、そしてそれらがどのように使用されるかを知る必要があります。
変数 基本的にはメモリの場所(通常はいくつかの値を含む)であり、そのメモリの場所を参照し、その場所に存在する値を使用するためにいくつかの識別子(つまり、変数名)を使用します。
これをよりよく理解するために、現在の変数に対して相対的な位置に存在するメモリ セルからの情報が必要だと仮定します。識別子を使用して近くのセルから情報を抽出できますか?いいえ。識別子(変数名)はその特定のセルに含まれる値のみを与えるためです。
ただし、この変数が存在するメモリ アドレスを何らかの方法で取得できれば、近くの場所に簡単に移動して、その情報も (実行時に) 使用できます。
ここでポインタが活躍します。これらは、必要なときにいつでも追加のアドレス情報を使用できるように、その変数の場所を保存するために使用されます。
構文: 変数のアドレスを保存するには、単純に使用できます。 & (アドレス) 演算子。
foo = &bar
ここで、foo には変数 bar のアドレスが格納されます。
さて、そのアドレスに存在する値を知りたい場合はどうすればよいでしょうか?
そのためには、単に * (逆参照) 演算子.
value = *foo
変数のアドレスを保存する必要があるので、変数の場合と同じようにメモリが必要になります。これは、ポインタも他の変数と同じ方法でメモリに格納されることを意味するため、変数の場合と同様に、ポインタのアドレスをさらに別のポインタに格納することもできます。