int m, n, j;
n=16;
j=15;
m = n++ -j+10;
printf("%d", m);
輸出:11.有人能告訴我這是如何工作的? (C編程)
在這裏,第一,n
舊值被提供給m
,然後它被遞增,以便新的值i得到的是17,然後將表達得以解決,即j+10
= 25,那麼n的新值減去25即17-25。 對嗎?但答案與輸出11
不匹配。 那麼這是如何工作的? 另外,我是編程新手,並開始學習C.你認爲哪本書最適合我?由於我沒有編程經驗。 謝謝。
int m, n, j;
n=16;
j=15;
m = n++ -j+10;
printf("%d", m);
輸出:11.有人能告訴我這是如何工作的? (C編程)
在這裏,第一,n
舊值被提供給m
,然後它被遞增,以便新的值i得到的是17,然後將表達得以解決,即j+10
= 25,那麼n的新值減去25即17-25。 對嗎?但答案與輸出11
不匹配。 那麼這是如何工作的? 另外,我是編程新手,並開始學習C.你認爲哪本書最適合我?由於我沒有編程經驗。 謝謝。
m = n++ -j+10;
是相同
m = n -j+10;
n = n + 1; // m is 11.
如果是++n
這將是
n = n + 1;
m = n -j+10; //m is 12.
那麼表達式得以解決,即J + 10 = 25
號這將是-j+10
= -5
我的建議是,不要編寫複雜的表達式,除非你完全確定你在寫什麼。
我明白了。幫助很多。謝謝。 – 912M0FR34K
n++
首先返回n
的值,然後遞增它。
因此,所發生的實際計算是m = 16 - 15 + 10
這是11
我想你想要的是:
m = (n+1) - (j+10);
使用++
操作是遞增的n
的價值後,將來使用您使用它的當前值來計算m
。
但增量在哪裏? 'n = 16'和'j = 15'的值。那麼在這裏使用'++'是什麼? – 912M0FR34K
n ++增加n不是m,如果你打印n的值,你會看到它是17 – yurib
我明白了。幫助很多。謝謝。 – 912M0FR34K
n
遞增後其值在m
結束的表達式中使用。
你在這裏有一些錯誤。
n++
將增加n
並返回原來的結果,這樣的話你有m = 16 ...
。
-j
所以你有m = 16 - 15 ...
。
+10
所以你有m = 16 - 15 + 10
。
現在我最後一次做數學,會出現m = 11
像你所看到的。
如果你希望它是m = 17 - (15 + 10)
然後你想:
int m, n, j;
n=16;
j=15;
m = ++n -(j+10);
printf("%d", m);
我明白了。幫助很多。謝謝。 – 912M0FR34K
n++
是後增量。它只會在執行後遞增n
的值:m = n++ -j+10;
++n
是預增量。在計算m之前,它遞增n
的值。 m = ++n -j+10;
你正在作出兩個不正確的解釋。
首先,如其他答案所示,n++
只在整個表達式被評估後才增加n
。其次,你有-j+10
。這不等於-(j+10)
,所以說j+10
是25
並且您正在尋找something - 25
是錯誤的。另一種查看方式-j+10
是10-j
。
我明白了。幫助很多。謝謝。 – 912M0FR34K
在回答關於一本好書的問題時,您可能會考慮學習C++而不是簡單的舊C,因爲C++是C的超集。對於C++,您需要獲得Bjarne Stroustrup的「The C++ Programming Language 」。很容易閱讀,並且在您的書架上可以持續很長時間作爲一個很好的參考。
其實算後增量操作的操作,其n做... 你有16-15 + 10 = 11 但如果打印n您應該有17
開始,你可以閱讀一些關於基礎知識的書,但這個例子並不簡單;它包括操作符的優先級,這可能會很棘手。
開始簡單...在c中編寫不可讀代碼非常簡單。 http://www.cs.cf.ac.uk/Dave/C/node4.html
希望它有助於
我明白了。幫助很多。謝謝。 – 912M0FR34K
在表達式m = n++ -j+10;
編譯器將表達式視爲m= n++ ((-j)+10)
作爲n和j的intialized值n = 16
和j = 15
。我們有m = 16++ ((-15)+10)
。我們得到的輸出爲11
。
表達式執行後n
將遞增。
除非右邊的完整計算(這就是爲什麼我們談論R值,R代表正確)已經完成,否則沒有值被賦值給m。這裏m是L值(左邊的L)。 – zaphod1984
'm'是'16-15 + 10',因爲'n ++ == 16'。 – Gandaro