解引用简单数字时的奇怪输出
Weird output while dereferencing simple numbers
我的指针值表现得很奇怪。如果我把其中一个指针的加法操作符(++改为+=)改变了,就会把另一个指针弄乱。(如果我没说错的话)。
例如:#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++
也发生了同样的事情。
相关文章:
- 为什么当类的数据成员更改为引用时输出不同
- 当将对象传递给具有参数作为引用类型的函数以及当其类对象类型时,会得到不同的输出
- 当在函数内部使用静态变量时,输出会发生变化,该函数在c++中返回引用
- 未定义的符号:符号引用错误.没有输出写入主
- 来自任意取消引用指针的输出
- 返回对此的引用时出现意外的std::ostream输出
- 将std::vector作为输入/输出引用参数传递时丢失了一些数据
- 指针引用的值不再存在时输出冲突
- 在 c++11 中,是否仍然需要传入对接受函数输出的对象的引用
- 输出流中引用的奇怪行为
- C++转义字符和引用变量输出混淆
- 使用引用和左值时出现意外输出
- 当函数返回引用被写入LHS时,无法预测输出
- 在模板中,如果我们创建一个函数并通过引用传递变量address作为参数,它会给出所需的输出吗?
- 期望输出带有指针和引用混合的代码
- 创建一个接受ostream引用并输出给它的函数的正确方法是什么?
- 为什么我不需要解引用一个char指针来输出c风格的字符串?
- 常量引用行为 - 为什么会出现此输出
- c++字符串输出引用参数或返回值,是否有最优的方法
- 解引用简单数字时的奇怪输出