2015-10-14 99 views
0

这是问题所在。我试图创建一个内存图,我知道一切,直到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); 
} 
+0

&符号是否为'void mem(int *&a,int * b)'是故意的? – dspfnder

回答

0

b++;的增加是b认为是int地址它有一个后的int地址。

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

1

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