16

私はそれが実装やシステムに依存しているという(おそらく間違った)仮定をしています。INT_MAXやCHAR_BITのように、メモリ内のポインタのサイズを教えてくれるものはありますか?

4

6 に答える 6

33

ポインタはメモリ内の場所を指しているため、32ビットシステムでは32ビット、64ビットシステムでは64ビットになります。

ポインタのサイズも、ポインタが指すタイプとは無関係であり、次の方法で測定できます。sizeof(anyType*)

UPD

私がこれに答えた方法は、質問がされた方法によって示唆されました(それは簡単な答えを示唆しました)。はい、仮想メソッドテーブルへのポインタのような場合、ポインタのサイズが異なり、この記事によると、プラットフォームや同じプラットフォーム内のコンパイラによっても異なることに同意します。私の場合、たとえば(x64 ubuntu、GCC 4.6.3)は16バイトに相当します。

于 2012-07-16T09:51:35.023 に答える
5

動作しますかsizeof(int*)?またはあなたがチェックすることを意図しているものは何ですか?

于 2012-07-16T09:51:03.580 に答える
2

それは間違いなくシステムに依存しています。通常、単純なデータポインタはsize_t変数に格納できます。C ++ 11には、size_tの最大値であるSIZE_MAXマクロがあります。C ++ 11では、std::intptr_tを使用することもできます。

メンバー関数ポインターを考慮に入れると、事態はさらに複雑になります。クラスが1つ以上の親から継承するかどうか、仮想関数を公開するかどうか、そしてもちろん実装に依存します。

ここでは、メンバー関数ポインターに関する詳細な記事と、いくつかのコンパイラーの例を見つけることができます。

于 2012-07-16T10:47:10.633 に答える
2

のような単純なケースの答えは簡単int*で、他の答えで与えられます。

ただし、多重継承を使用するオブジェクトのポインター メンバーには複数 (WORDs/DWORDs/QWORDs)、最悪の場合は最大 5 つ (5 つ) が含まれる可能性があることに注意してください。

これに関する良い記事: http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible

于 2012-07-16T10:53:04.100 に答える
1

ポインタのサイズはオペレーティングシステム(実際にはオペレーティングシステムのビット数)によって異なります。sizeof(type *)関数を試してください。

于 2012-07-16T09:56:59.433 に答える
-1
#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();
}
于 2015-11-15T15:06:12.030 に答える