解引用简单数字时的奇怪输出

Weird output while dereferencing simple numbers

本文关键字:输出 引用 简单 数字      更新时间:2023-10-16

我的指针值表现得很奇怪。如果我把其中一个指针的加法操作符(++改为+=)改变了,就会把另一个指针弄乱。(如果我没说错的话)。

例如:

#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

为什么会发生这种情况?

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

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

*ptr2++类似于*(ptr2++),意思是在

cout << *ptr2 << endl;  

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