指针和引用

Pointers and Referencing

本文关键字:引用 指针      更新时间:2023-10-16

问题在这里。我试图创建一个内存图,我理解一切,直到b++,因为当代码被执行时,它改变val的值从10到4。原因是什么?

#include <iostream>
using namespace std;
void mem(int*& a, int* b){
    a --;
    b++;
    a = new int[3];
    a[0] = 3;
    a[1] = *b;
    a[2] = ++(*b);
}
int main()
{
    int data[] = {2, 4, 6, 8};
    int *ptrA = data;
    for (int i = 0; i < 4; i ++){
        (*ptrA)++;
        ptrA++;
    }
    int val = 10;
    mem(ptrA, &val);
}

在您的示例中,b是指向整数的指针,而b++要求指针以与ptrA++相同的方式递增(即指向下一个可用的整数)。然而,不同之处在于ptrA指向数组的开始;我们仍然拥有下一个可用整数的内存,所以一切都没问题。对于b,它指向单个整数;增加它并尝试在之后使用它会导致未定义的行为。

b++;正在将b保存的地址增加到int地址之后的一个int

在此之后,变量的任何使用都是未定义的,因为我们现在指向一些未指定的内存。