2015-10-14 241 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,它指向一個整數;增加它並嘗試使用它後導致未定義的行爲。