簡體   English   中英

關於C ++中的i ++和++ i

[英]Regarding i++ and ++i in c++

有以下兩個程序用於查找最大和第二大整數:

1。

int main()
{
    int const no_of_elements =10;
    int list[no_of_elements] = { 1, 2, 3, 4, 5, 10, 9, 6, 7, 10 };
    int largest = list[0];
    int second_largest = list[0];
    int pos_largest = 0;
    int pos_second_largest = 0;
    int i;

    for (i = 0; i < no_of_elements; i++)
    {
        if (largest <= list[i])
        {
            second_largest = largest;
            largest = list[i];
            pos_second_largest = pos_largest;
            pos_largest = i;
        }
    }

    cout << "Largest number is : " << largest << "\n";
    cout << "And it is at the position : " << ++pos_largest << endl;
    cout << "Second largest number is : " << second_largest << " and its at the position : " << ++pos_second_largest << endl;
    return 0;
}

2.在for循環中,我執行pos_largest = ++i
他們給出不同的答案:
1.給出largest=10 secondlargest=10即根據需要
但是2.給出largest=10 secondlargest=9

請解釋一下????

i++是后遞增的。 這意味着“給我i的值,但在那之后增加它”。

++i是預遞增的。 這意味着“增加i ,然后給我它的新價值”。

int i = 1;
int a = i++; // a is now 1, i is 2

i = 1; // reset i's value to 1
int b = ++i; // i's value is incremented to 2, b's value is 2

關於for循環,這兩者具有相同的效果

int i;
for (i = 0; i < 10; i++) {
    // ...
}

for (i = 0; i < 10; ++i) {
    // ...
}

for循環中的第三部分在循環主體的每次迭代(執行) 之后運行。

在#2中,當您點擊列表中的前10時,您將pos_largest分配為6(即9在哪里)而不是5(其中10在哪里),因為在分配之前您已將i預先增加了。 因此,稍后您在列表中點擊第二個10時,它將變為最大,而第二個最大現在被設置為9(即,點6中的值)。

++ii++i+=1 前者先增加i然后進行運算,后者先對i進行運算,之后將其值加1

好吧,您的主要問題是了解++ i(預增量)和i ++(后增量)之間的區別。 ++ i表示它將在下一個即將到來的變量或左值中快速添加值1。 i ++的含義是在序列點到來之前,它不會對先前的左值或變量加1。 並記住順序點是; {} && || 等e。 如果您有這樣的代碼。

int test=6;
cout<<(test++)<<endl;
cout<<test<<endl;

您會以為它將像這樣打印

7
7

但這不是因為這是職位增加。 在一個序列點出現並且下一個序列點是之前,它不會加1來測試; 因此它將像這樣打印。

6
7

與之相反的是預增量。 它將快速將1加到變量中(即,左值,否則將給出error),然后顯示7,而無需等待序列點。

如果使用i ++,它將在增加變量之前完成操作。 如果使用++ i,它將在完成操作之前遞增。 在大多數情況下,您都想使用i ++,盡管它在很大程度上取決於您的使用方式。 例如:

for(int i = 0; i < 5; i++){
    cout << "i = "<< i << endl;
}

這將完成操作,然后遞增。 但是,如果使用此命令:

for(int i = 0; i < 5; ++i){
    cout << "i = " << i << endl;
}

在打印值之前它將先增加

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM