#include<iostream>
using namespace std;
void test(int *s){
s++;
*s=3;
}
int main(){
int s=0;
test(&s);
cout<<s;
return 0;
}
我得到的输出 000 。我只期待0.但是我得到零等于在测试函数中分配给s的值。我无法理解为什么要提供这个输出?
编辑。
答案 0 :(得分:3)
未定义的行为是未定义的。当您在main
中调用时,test
通过无效指针进行写入,因此任何事情都可能发生。
答案 1 :(得分:3)
您的程序有不确定的行为。
该行
s++;
递增指针,而不是指针指向的对象的值。
然后是
行*s=3;
修改了指针指向的新位置的值。那就是访问你不应该访问的内存。
答案 2 :(得分:2)
你在测试函数参数中传递了's',所以* s是实际值但是当你增加s时,指针转到一个未定义的位置,因此输出可能是任何东西。删除行s ++,你会得到3作为答案。