指针的算术运算(C# 编程指南)

本主题讨论使用算术运算符 + 和 - 来操作指针。

提示

不能对 void 指针执行任何算术运算。

对指针执行加减数值操作

可以将类型为 intuintlongulong 的值 n 与 void* 以外任何类型的指针 p 和 相加。 结果 p+n 是加上 n * sizeof(p) to the address of 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 = p2 - p1;

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

C# 语言规范

有关更多信息,请参见 C# 语言规范。C# 语言规范是 C# 语法和用法的权威资料。

请参见

参考

不安全代码和指针(C# 编程指南)

指针表达式(C# 编程指南)

C# 运算符

操作指针(C# 编程指南)

指针类型(C# 编程指南)

unsafe(C# 参考)

fixed 语句(C# 参考)

stackalloc(C# 参考)

概念

C# 编程指南

其他资源

类型(C# 参考)