ホームページ >バックエンド開発 >C++ >C のポインターは、指すデータ型に関係なく固定サイズですか?

C のポインターは、指すデータ型に関係なく固定サイズですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-13 18:02:10409ブラウズ

Do Pointers in C   Have a Fixed Size Regardless of the Data Type They Point To?

C のポインター サイズを理解する

「ポインターのサイズは、ポインターが指す型のサイズに依存するのか」という疑問が生じます。それともポインタは常に固定サイズを維持するのでしょうか?」重複した質問の基礎に基づいて、この概念を詳しく見てみましょう。

C では、ポインターは通常、固定サイズを持ちます。 32 ビット実行可能ファイルでは、通常、32 ビットを占有します。ただし、古いバージョンの Windows など、16 ビット ポインターと 32 ビット ポインターを区別する必要がある例外も存在します。

次のコード スニペットを考えてみましょう。

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(x): 変数 x のサイズを出力します。 32 ビット実行可能ファイルの場合は 4 です (int が 4 バイトであると仮定します)。
  • sizeof(xPtr): ポインタ変数 xPtr のサイズを出力します。通常、前述したように、ポインタ変数が指す型に関係なく、このサイズは固定のままです。 to.
  • sizeof(y): 文字変数 y のサイズを出力します。通常、単一の場合は 1 バイトです。 Character.
  • sizeof(yPtr): xPtr と同様に、ポインタ変数 yPtr のサイズを出力します。これは xPtr と同じです。

ポインタは通常、サイズは一定であるため、コード内でこの仮定に依存するのは賢明ではありません。プログラムが特定のサイズのポインターに依存している場合は、常に明示的に検証してください。

関数ポインターは注目すべき例外です。それらのサイズは、特定のシステムまたはコンパイラで採用されている呼び出し規則に応じて異なります。関数ポインターの詳細については、「Jens」によって提供された応答を参照してください。

以上がC のポインターは、指すデータ型に関係なく固定サイズですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。