在c ++中输出以下程序的内容是什么?

时间:2017-08-21 15:52:26

标签: c++ pointers

#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的值。我无法理解为什么要提供这个输出?

编辑。

3 个答案:

答案 0 :(得分:3)

未定义的行为是未定义的。当您在main中调用时,test通过无效指针进行写入,因此任何事情都可能发生。

答案 1 :(得分:3)

您的程序有不确定的行为。

该行

s++;

递增指针,而不是指针指向的对象的值。

然后是

*s=3;

修改了指针指向的新位置的值。那就是访问你不应该访问的内存。

答案 2 :(得分:2)

你在测试函数参数中传递了's',所以* s是实际值但是当你增加s时,指针转到一个未定义的位置,因此输出可能是任何东西。删除行s ++,你会得到3作为答案。