0
void reverse(char *s,int j,int i) {
      printf("%d\t%d\n",i,j);
      if(i<j) {
        swap(s, i, j);
        reverse(s,--j,++i);
      }
    }

我在 Stack Overflow 上读到,在函数调用中使用后增量运算符会带来问题,但是在函数调用中使用前增量也是错误的吗?

请帮忙。

4

2 回答 2

4

如果增量运算符修改同一序列点(语句)中的同一变量,则会导致未定义的行为。例如,如果您调用这样的函数:foo(++i, ++i)C 标准没有说明应该以什么顺序执行增量,并且您无法预测将传递给函数的内容。

这不是这里的情况,所以你的程序的语义是明确定义的。也就是说,i 和 j 递增,然后将它们的值传递给函数。

于 2013-07-21T13:02:15.737 回答
1

我看到您编写的函数的唯一问题是您使用了条件 i!=j,这可能会导致偶数长度的字符串出现问题。
考虑字符串长度 = 4 的情况,您将函数调用为 reverse(s,3,0)-> reverse(s,2,1)->reverse(s,1,2).. 所以您可以看到 'i' 永远不会等于 'j' 并且循环不会终止,而是当 j 变为负数并且 i 变得大于字符串的长度时,您可能会在访问部分内存时出现运行时错误不允许。希望这是有道理的。:)

于 2013-07-21T14:07:30.223 回答