我的指针值非常奇怪。如果我改变其中一个指针加法运算符(++到+ =)它会弄乱另一个指针。 (如果我说对了)。
例如:
#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
为什么会这样?
答案 0 :(得分:4)
*ptr++
表示*(ptr++)
而非(*ptr)++
,因此您正在递增指针,而不是它指向的int
。
答案 1 :(得分:3)
两个程序都调用未定义的行为,因为您正在两个程序中访问未初始化的内存。
*ptr2++
类似于<{p}中的*(ptr2++)
cout << *ptr2 << endl;
您正在访问未在代码1中初始化的ptr2
递增值。在代码2中,*ptr1++
和*ptr2++
也发生了同样的事情。