为什么不是垃圾值

Alg*_*ist 1 c algorithm

伙计这是一个程序,我在我的编译器上运行,我得到30 0 0 0作为输出.可以解释我为什么值为0.因为在2'循环tmp将指向数组之外的东西所以wouldn'这是一个垃圾值.为什么不打印垃圾值而是在输出中输入0.

void main()
{
  int array[4]={10,20,30,40};
  int *tmp=array;
  for (int i=0;i<4;i++)
  {
    tmp+=sizeof(int);
    printf("%d",*tmp);
  }
  getch();
}
Run Code Online (Sandbox Code Playgroud)

R..*_*R.. 5

您不添加sizeof(int)int指针到达下一个数组元素; 你添加1.添加sizeof(int)将按sizeof(int) 元素(可能是4个元素)前进,让你超过数组的末尾.这是你的问题.

编辑:好吧显然该程序是一个面试问题的一部分,旨在说明未定义的行为,面试问题的正确答案是,一旦调用了未定义的行为,任何事情都可能发生.

  • @ruslik - 使用OP的结果看起来`sizeof(int)`对他来说是2. (2认同)
  • @ yogi15490:答案是,一旦你调用了UB,**所有的**投注都会被取消.0和1328723一样多,但是没有理由它不能打印1.5或"再见世界"或做任何其他事情.如果程序*曾*调用UB,甚至不能保证程序中*之前的*输出是正确的. (2认同)