-1

问题 1

int x;
if (x++)
  {
    printf ("\nASCII value of X is smaller than that of x");
  }

x这里分配了一个垃圾值??

问题2:

main ()
{
  int i;
  for (i = 0; i++ < 10;)
    {
      printf ("%d\n", i);
    }
}

谁能解释一下它是如何i++ < 10工作的?我的意思是它应该以 9 结尾,为什么是 10

4

3 回答 3

2
  1. 的值x不确定的,并且可能是陷阱表示,在这种情况下, 的行为x++是未定义的。

  2. 表达式i++ 计算i;的当前值 作为副作用, in 的值i会增加。因此,如果i== 1,则表达式i++将计算为 1,并且作为副作用i将设置为 2。

章节和诗句

6.5.2.4 后缀递增和递减运算符

...
2 后缀++运算符的结果是操作数的值。得到结果后,操作数的值递增。(也就是说,将相应类型的值 1 添加到其中。)有关约束、类型和转换以及操作对指针的影响的信息,请参阅加法运算符和复合赋值的讨论。更新操作数存储值的副作用应发生在前一个序列点和下一个序列点之间。

强调我的。

于 2012-06-07T21:58:33.007 回答
1

在第一个问题中,您声明 x

int x;

但是您没有分配它,这会保留一些内存来保存 x 的值,但不会将其初始化为已知值。这真是一件坏事。然后你阅读它,增加它,并可能做一些事情。

if ( x++ ) {
  printf ( "\nascii value of X is smaller than that of x" ) ;
}

由于您在阅读它之前不知道它的价值,因此不可能对您的 if 语句是否会打印任何内容做出有根据的猜测。

在您的第二个问题(每个问题一个问题)中,您读取 i 的值,然后将其递增,然后对读取的值进行比较。后增量基本上意味着“在我读取增加值”,因此将存储新值,然后对旧值进行比较,下面的 printf 语句将打印“当前,新”值。

于 2012-06-07T21:24:00.150 回答
1

问题1:是的

问题2:是的。如果 i 小于 10,则 i 加 1 然后进行比较。

于 2012-06-07T21:21:03.847 回答