为什么循环的第一瞬间n*n的结果是4?我认为应该是1*1,但实际上是2*2。

6
为什么在循环的第一个时刻,“n * n”得到的结果是4呢?对我来说应该是1*1。但实际上它变成了2*2。
请给我一个简单的答案,因为我还是个新手 :)
#include <iostream>
using namespace std;
int main(){

    int n =1 , *p;
    p = &n;

    char aString[] = {"student"};

    for (int i = 0; i<5; i++)

        cout<< "i = "<< i << "n*n = "<<n*n<< "n++ = "<< n++<< " *p "<<endl; 

    system ("pause");
    return 0;
 }

http://ideone.com/nWugmm

2个回答

6
表达式中元素的求值顺序是未指定的,除了一些特殊情况,比如 && 和 || 等等。
cout<< "i = "<< i << "n*n = "<<n*n<< "n++ = "<< n++<< " *p "<<endl;

您假设一个订单,特别是n++是最后被评估的。

要解决这个问题,您可以将表达式分为两部分:

cout<< "i = "<< i << "n*n = "<<n*n<< "n++ = "<< n<< " *p "<<endl;
n++;

0

求值顺序未指定,它不是从左到右,也不是从右到左。

如果您的代码依赖于顺序,请像Daniele建议的那样拆分代码。

并使用高警告级别编译您的代码,编译器可以帮助您发现这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接