例如:
int* ptr = someArray;  // 指向数组的首地址
++ptr;  // 指针向后移动4个字节(假设int类型占用4个字节)
引用的++运算符:引用是某个变量的别名,对引用使用++运算符,实际上是直接对原始变量进行自增操作。
int num = 5;
int& ref = num;  // ref是num的引用
++ref;  // num的值变为6
int& createDynamicInt() {
    int* dynamicInt = new int(5);
    return *dynamicInt;  // 返回动态内存分配对象的引用
}
int main() {
    int& myInt = createDynamicInt();
    // 动态分配的内存将无法释放,因为不再有指针指向该内存
    delete &myInt;  // 错误:试图释放一个不是通过new分配的指针
    return 0;
}
其中函数createDynamicInt()返回了一个动态分配的整数地址的引用。在main()函数中,我们将这个返回的引用赋值给myInt变量。然而,当main()函数结束时,myInt变量消失了,但是动态分配的整数对象仍然存在内存中,无法获得内存释放。在尝试释放myInt指向的内存时(使用delete),我们得到了一个错误,因为myInt指向的内存并不是通过new分配的。这是因为返回的是引用,并非指针,所以无法通过delete释放它。为了避免这个问题,应该使用指针来返回动态分配的对象,这样可以在不需要时手动释放内存。修改上述例子的正确实现如下:
int* createDynamicInt() {
    int* dynamicInt = new int(5);
    return dynamicInt;  // 返回动态内存分配对象的指针
}
int main() {
    int* myInt = createDynamicInt();
    delete myInt;  // 释放动态分配的内存
    return 0;
}