[英]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中的值)。
++i
和i++
是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.