次の方法で共有


ポインタに対する算術演算 (C# プログラミング ガイド)

更新 : 2007 年 11 月

ここでは、算術演算子 + および - を使用したポインタ操作について説明します。

25ckw473.alert_note(ja-jp,VS.90).gifメモ :

void ポインタには、算術演算を実行できません。

ポインタへの数値の加算と除算

型が intuintlong、または ulong の値 n を void* 以外の任意の型のポインタ p に加算できます。結果の p+n は、p のアドレスに n * sizeof(p) を加算した結果のポインタです。同様に p-n は、p のアドレスから n * sizeof(p) を除算した結果のポインタです。

ポインタの除算

同じ型のポインタを除算することもできます。結果は常に long 型になります。たとえば、p1 と p2 が pointer-type* 型のポインタの場合、式 p1-p2 の結果は次のようになります。

((long)p1 - (long)p2)/sizeof(pointer_type)

算術演算がポインタのドメインをオーバーフローしても例外は生成されません。どのような結果が生じるかは実装によって異なります。

使用例

// compile with: /unsafe
class PointerArithmetic
{
    unsafe static void Main() 
    {
        int* memory = stackalloc int[30];
        long* difference;
        int* p1 = &memory[4];
        int* p2 = &memory[10];

        difference = (long*)(p2 - p1);

        System.Console.WriteLine("The difference is: {0}", (long)difference);
    }
}
// Output:  The difference is: 6

C# 言語仕様

詳細については、「C# 言語仕様」の次のセクションを参照してください。

  • 18.5.6 ポインタの算術演算

参照

概念

C# プログラミング ガイド

参照

unsafe コードとポインタ (C# プログラミング ガイド)

ポインタ式 (C# プログラミング ガイド)

C# の演算子

ポインタの操作 (C# プログラミング ガイド)

ポインタ型 (C# プログラミング ガイド)

unsafe (C# リファレンス)

fixed ステートメント (C# リファレンス)

stackalloc (C# リファレンス)

その他の技術情報

型 (C# リファレンス)