私はそれが実装やシステムに依存しているという(おそらく間違った)仮定をしています。INT_MAXやCHAR_BITのように、メモリ内のポインタのサイズを教えてくれるものはありますか?
6 に答える
ポインタはメモリ内の場所を指しているため、32ビットシステムでは32ビット、64ビットシステムでは64ビットになります。
ポインタのサイズも、ポインタが指すタイプとは無関係であり、次の方法で測定できます。sizeof(anyType*)
UPD
私がこれに答えた方法は、質問がされた方法によって示唆されました(それは簡単な答えを示唆しました)。はい、仮想メソッドテーブルへのポインタのような場合、ポインタのサイズが異なり、この記事によると、プラットフォームや同じプラットフォーム内のコンパイラによっても異なることに同意します。私の場合、たとえば(x64 ubuntu、GCC 4.6.3)は16バイトに相当します。
動作しますかsizeof(int*)
?またはあなたがチェックすることを意図しているものは何ですか?
それは間違いなくシステムに依存しています。通常、単純なデータポインタはsize_t変数に格納できます。C ++ 11には、size_tの最大値であるSIZE_MAXマクロがあります。C ++ 11では、std::intptr_tを使用することもできます。
メンバー関数ポインターを考慮に入れると、事態はさらに複雑になります。クラスが1つ以上の親から継承するかどうか、仮想関数を公開するかどうか、そしてもちろん実装に依存します。
ここでは、メンバー関数ポインターに関する詳細な記事と、いくつかのコンパイラーの例を見つけることができます。
のような単純なケースの答えは簡単int*
で、他の答えで与えられます。
ただし、多重継承を使用するオブジェクトのポインター メンバーには複数 (WORDs/DWORDs/QWORDs)、最悪の場合は最大 5 つ (5 つ) が含まれる可能性があることに注意してください。
これに関する良い記事: http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible
ポインタのサイズはオペレーティングシステム(実際にはオペレーティングシステムのビット数)によって異なります。sizeof(type *)関数を試してください。
#include<stdio.h>
#include<conio.h>
void main()
{
printf(" %d",sizeof(int *));
printf(" %d",sizeof(char *));
printf(" %d",sizeof(float *));
printf(" %d",sizeof(double *));
getch();
}