奇怪的输出,同时取消引用简单的数字

时间:2014-06-19 18:19:37

标签: c++ dereference

我的指针值非常奇怪。如果我改变其中一个指针加法运算符(++到+ =)它会弄乱另一个指针。 (如果我说对了)。

例如:

#include <iostream>

using namespace std;

int main() {

   //Pointer test 1
   int *ptr, x = 5;
   ptr = &x;
   *ptr += 1;
   cout << *ptr << endl;

   //Pointer test 2
   int *ptr2, x2 = 5;
   ptr2 = &x2;
   *ptr2++;
   cout << *ptr2 << endl;

}

产量和产量:6,6

然而,当我将第一个指针改为“++”而不是“+ =”时,如:

#include <iostream>

using namespace std;

int main() {

   //Pointer test 1
   int *ptr, x = 5;
   ptr = &x;
   *ptr++;
   cout << *ptr << endl;

   // Pointer test 2
   int *ptr2, x2 = 5;
   ptr2 = &x2;        
   *ptr2++;               
   cout << *ptr2 << endl;

}

我得到的值为0,5

为什么会这样?

2 个答案:

答案 0 :(得分:4)

*ptr++表示*(ptr++)而非(*ptr)++,因此您正在递增指针,而不是它指向的int

答案 1 :(得分:3)

两个程序都调用未定义的行为,因为您正在两个程序中访问未初始化的内存。

*ptr2++类似于<{p}中的*(ptr2++)

cout << *ptr2 << endl;  

您正在访问未在代码1中初始化的ptr2递增值。在代码2中,*ptr1++*ptr2++也发生了同样的事情。