C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のポインターデータ型とは?宣言方法とunsafeコードの使い方を解説

C#のポインターデータ型とは

ポインター(pointer)とは、別の変数のメモリアドレスを値として保持する特殊な変数です。つまり、ポインターはメモリ上の特定の場所を直接指し示すことができます。

通常の変数や定数と同様に、ポインターも使用する前に必ず宣言する必要があります。

ポインターの宣言構文

C#でポインターを宣言する基本的な構文は以下の通りです。

type *var-name;

具体的な宣言例を見てみましょう。

int *ip;     /* 整数型(int)へのポインター */
double *dp;  /* 倍精度浮動小数点型(double)へのポインター */

このように、*(アスタリスク)を使ってポインターであることを示し、指し示す対象のデータ型を指定します。

unsafe修飾子とアンマネージコード

C#は本来、メモリを安全に管理するマネージド言語ですが、unsafe修飾子を付けたコードブロック内に限り、ポインター変数を使用することが許可されています。

このようなポインターを使うコードは「unsafeコード」または「アンマネージコード」と呼ばれます。unsafeコードはガベージコレクタの管理外で直接メモリを操作できるため、パフォーマンスが求められる場面で活用されますが、その分プログラマ自身がメモリ安全性に注意する必要があります。

ポインターの宣言と使用例

以下は、ポインター変数を宣言して実際に使用するサンプルコードです。Mainメソッドにunsafe修飾子を付けています。

static unsafe void Main(string[] args) {
    int var = 20;
    int* p = &var;

    Console.WriteLine("Data is: {0} ", var);
    Console.WriteLine("Address is: {0}", (int)p);
    Console.ReadKey();
}

コードのポイント

  • &var:変数varのメモリアドレスを取得する演算子です。
  • int* p:整数型へのポインターpを宣言しています。
  • (int)p:ポインターが保持するアドレス値を整数として出力しています。

コンパイル時の注意点

unsafeコードを含むプログラムをコンパイルする際は、/unsafeオプションを指定する必要があります。Visual Studioの場合は、プロジェクトのプロパティから「アンセーフ コードの許可」を有効にしてください。

  1. C言語の基本データ型を徹底解説!int・char・floatの種類とサイズ一覧

    C言語の基本データ型とは? C言語のコンパイラがサポートする基本データ型は、大きく分けて次の4つです。 整数型(Integer) 文字型(Character) 浮動小数点型(Floating-point) 倍精度浮動小数点型(Double precision floating point) プログラムで扱う値の種類(整数・文字・実数など)に応じて適切な型を選ぶことは、正確で効率的なコードを書くための第一歩です。なお、各データ型のサイズや表現できる値の範囲は、使用するコンパイラや実行環境によって異なる場合がある点に注意してください。 整数型(Integral Data Type) 整数型は

  2. Python 3の標準データ型とは?数値・シーケンス・辞書の基本をわかりやすく解説

    Python 3の標準データ型の概要Python 3に標準で用意されているデータ型は、大きく分けて「数値型」「シーケンス型」「辞書(ディクショナリ)型」の3つに分類できます。辞書はキーと値のペアを格納するコレクションであり、Pythonプログラミングにおいて最も頻繁に使われるデータ構造の一つです。数値型(Numeric Types)数値型には「整数(int)」「浮動小数点数(float)」「複素数(complex)」の3種類があります。整数(int):小数点を含まない整数値です。例:10、-10浮動小数点数(float):小数部分を持つ実数です。例:1.55、0.005複素数(complex)