ポインタに対する算術演算 (C# プログラミング ガイド)
更新 : 2007 年 11 月
ここでは、算術演算子 + および - を使用したポインタ操作について説明します。
メモ : |
---|
void ポインタには、算術演算を実行できません。 |
ポインタへの数値の加算と除算
型が int、uint、long、または 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 ポインタの算術演算
参照
概念
参照
unsafe コードとポインタ (C# プログラミング ガイド)