2015-06-12 64 views
6

Tại sao kết quả "n * n" là 4 tại thời điểm đầu tiên của vòng lặp? với tôi nó phải là 1 * 1. thay vào đó là 2 * 2.tại sao n * n kết quả là 4 tại thời điểm đầu tiên của vòng lặp? với tôi nó phải là 1 * 1. thay vào đó, nó xuất hiện dưới dạng 2 * 2

Xin vui lòng cho tôi một câu trả lời đơn giản như tôi vẫn là một người mới bắt đầu :)

#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

Trả lời

6

Trình tự đánh giá của các yếu tố trong một biểu thức là không xác định, trừ một số trường hợp rất đặc biệt, chẳng hạn như số & & và || vv

viết:

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

bạn cho rằng một trật tự trong particulr rằng n ++ là đánh giá cuối cùng.

Để giải quyết vấn đề này, bạn có thể chia exression thành hai phần:

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

Trình tự đánh giá không được chỉ định, nó không trái sang phải như bạn có thể suy nghĩ và nó không phải sang trái.

Chia mã như Daniele đề xuất nếu mã của bạn dựa vào thứ tự.

Và biên dịch mã của bạn với mức cảnh báo cao, trình biên dịch có thể giúp bạn phát hiện điều này.

Các vấn đề liên quan