1. ホーム
  2. c++

[解決済み] ポインターの大きさはどのくらいですか?

2022-03-02 05:52:04

質問

ポインターのサイズは、それが指す型のサイズと同じですか?それともポインターは常に固定サイズですか? 例えば...

int x = 10;
int * xPtr = &x;
char y = 'a';
char * yPtr = &y;

std::cout << sizeof(x) << "\n";
std::cout << sizeof(xPtr) << "\n";
std::cout << sizeof(y) << "\n";
std::cout << sizeof(yPtr) << "\n";

この場合、出力はどうなるのでしょうか? どうでしょう? sizeof(xPtr) は4を返し sizeof(yPtr) は1を返します。それとも2つのポインタは実際には同じ大きさを返すのでしょうか? なぜこのような質問をするかというと、ポインターはメモリーアドレスを格納しているのであって、それぞれの格納されたアドレスの値を格納しているわけではないからです。

どのように解決するのですか?

ポインターは一般的に固定サイズで、例えば32ビットの実行ファイルでは通常32ビットです。 例外もあります。例えば、昔の16ビットWindowsでは、32ビットポインタと16ビットポインタを区別しなければなりませんでしたが... 最近のデスクトップOSでは、ある実行ファイル内では一様であると仮定するのが安全です。

編集:それでも、私はこの仮定をすることに強く注意を促します。 あなたのコードで . 絶対にあるサイズのポインタを持たなければならないものを書くなら、確認した方が良いですよー。

関数ポインタはまた別の話です。 Jensの回答 をご覧ください。