c - 在 C 中使用++ 运算符时出错

标签 c for-loop

我正在尝试这段代码:

for (i = 0; i <= 100; i *= (i = ++sqrt((double)i)))
  printf ("%d ", i);

我收到以下错误:

tp.c:10:33: error: lvalue required as increment operand
for (i = 0; i <= 100; i *= (i = ++sqrt((double)i)))

它可以正常工作:

for (i = 0; i <= 100; i *= (i = sqrt((double)i) + 1))
      printf ("%d ", i);

我不知道为什么会这样?我的猜测是++ 运算符需要一个变量来操作,它不能对函数返回的结果进行操作。有没有办法让代码使用++ 运算符工作?

最佳答案

确实; ++ 需要一个变量或其他可以合法修改的内容(您试图修改原始类型的返回值,这是不合法的) - 所谓的左值嗯>。为什么不简单地使用 sqrt((double)i) + 1

但是,即使进行了此更正,您的代码中仍然存在另一个问题:i *= (i = sqrt((double)i) + 1) 调用 undefined behavior因为它修改了 i 两次。因此,您的代码可能会执行任何操作,从提供您想要的结果到提供随机结果,再到删除您的硬盘驱动器。您到底想通过计算实现什么目的?

关于c - 在 C 中使用++ 运算符时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33403482/

相关文章:

c - 在 C 中将变量记录到文件中

被调用对象不是函数或函数指针

javascript - For 循环工作并返回结果,但随后停止并返回 - TypeError : Cannot read property 'tag' of undefined

c++ - for循环中的随机数生成器每次都给出相同的数字

shell - 使用 shell 脚本解析数据。 (排序/uniq/grep)

c - 子进程在 C 中终止后,父进程未完成

Android:从不兼容的指针类型初始化 JNI 函数指针

c++ - 编译器是否有可能检测到整数溢出或其他数据类型溢出的可能性?

c++ - 使用双for循环

java - 如何比较java中数组中的空元素?