我的指针值表现得很奇怪。如果我把其中一个指针的加法操作符(++改为+=)改变了,就会把另一个指针弄乱。(如果我没说错的话)。
例如:#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++
也发生了同样的事情。