Printf函式和cout函式引數執行順序以及自增與自減
Printf函式和cout函式引數執行順序以及自增與自減
總結:
在VC++ 6.0下:
C程式碼:
1、printf函式的執行順序是由右到左的
2、前自增運算子(++i)先加1,再使用i,此時i已經加了1;
3、後自增運算子(i++)先使用i,再加1,VC++6.0後自增運算是要在整條語句結束以後才自加1的
C++程式碼:
1、 cout函式的執行順序是依次由右向左的。
2、 前自增運算子(++i)先加1,再使用i,此時i已經加了1;
3、 後自增運算子(i++)先使用i,再加1,VC++6.0後自增運算是要在<< i++ <<結束以後才自加
Linux下:
在處理printf時,壓棧順序為從右往左,也就是說從右往左的計算(“計算”不等於“輸出”)。
a++和++a的壓棧的區別:在計算時,遇到x++會記錄此時的x的值作為最後的輸出結果。遇到x和++x的時候則不會將此時的計算結果作為最終的輸出,只會修改x的值,在最終輸出的時候都輸出x的值(所以++x和x的結果總是一樣的)。
對於a++的結果,是有ebp定址函式棧空間來記錄中間結果的,在最後給printf壓棧的時候,再從棧中把中間結果取出來;而對於++a的結果,則直接壓暫存器變數,暫存器經過了所有的自增操作。
cout 函式同 printf 函式。
C程式碼:
#include int main(){ int a=1; printf("%d %d %d %d %d %d\n",a++, ++a, a++, ++a, a++, ++a ); printf("%d\n",a); int x; x=1; printf("%d %d\n",x,x++); printf("%d\n",x); x=1; printf("%d %d\n",x++,x); printf("%d\n",x); x=1; printf("%d %d %d\n",x,x++,x); x=1; printf("%d %d %d %d\n",x,++x,x++,x); return 0; }
VC++ 6.0下輸出結果:
4 4 3 3 2 2
1 1
1 1
1 1 1
2 2 1 1
Linux下:
6 7 4 7 2 7
2 1
1 2
2 1 2
3 3 1 3
C++程式碼:
#include using namespace std; int main() { int a=1; cout<<a++<<" "<<a<<endl; cout << a << endl; a=1; cout<<a<<" "<<a++<<endl; cout << a << endl; a=1; cout<<a<<" "<<++a<<endl; cout << a << endl; a=1; cout<<++a<<" "<<a<<endl; cout << a << endl; return 0; }
VC++ 6.0下輸出結果:
1 1
2
2 1
2
2 2
2
2 1
2
Linux下:
1 2
2
2 1
2
2 2
2
2 2
2
相關推薦
Printf函式和cout函式引數執行順序以及自增與自減
Printf函式和cout函式引數執行順序以及自增與自減 總結: 在VC++ 6.0下: C程式碼: 1、printf函式的執行順序是由右到左的 2、前自增運算子(++i)先加
關於C語言中printf函式的引數執行順序
RT...看到有類似的題目,說是從右到左,, 藍後在VS2012中寫了如下的程式碼...但是執行出來的結果如下,, 這是為啥... 留一疑惑在這先. ok,這裡有了一個解釋: i++會建立一個拷貝 %d取值輸出,引數的傳遞是從右到左壓入棧,所以從右邊開始,i++,此時拷貝
自執行函式和匿名函式
所謂匿名函式就是沒有名字的函式,形式如下: function () { } 既然沒有名字,那麼如何呼叫呢: var b=function () { } b() 可以將匿名函式付給一個變數,這個變數現在就充當了這個函式的名稱,但是記住,這個不是名稱,我只
python中的函式,以及函式的可變引數,遞迴函式和高階函式以及練習題目
函式作用:實現程式碼的複用 函式概念:函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的程式碼段。 函式能提高應用的模組性,和程式碼的重複利用率。你已經知道Python提供了許多內建函式,比如print()。但你也可以自己建立函式,這被叫做使用者自定義函式。 系統的幾
JS根據id執行的函式和一般函式
document.getElementById("Btn").onclick = function(){} 和 function Btn(){} 本質的區別是根據ID執行的函式一定要在文字載入
JMeter 壓力測試使用函式和 CSV 檔案引數化 json 資料
在 http Load Testing 中,json 資料的提交是個讓人頭疼的問題。本文詳細介紹如何進行 JMeter 的 json 測試提交,以及如何將其引數化。 Step 1 http json 請求取樣器的錄製 這個工具很多,可
MATLAB引數估計normfit()函式和mle()函式
matlab中normfit在正態分佈中的使用技巧如下: 函式 normfit 格式 [muhat,sigmahat,muci,sigmaci] = normfit(X) ; [muhat,sigmahat,muci,sigmaci] =normfit(
C# 多引數執行緒以及匿名函式
今天早上的時候,要寫一個多引數的執行緒,找到一種,用新建一個物件的方法來引數,其實傳入的也是單個引數,只不過傳入的是一個物件,只不過物件裡有很多屬性罷了。後來在stackoverflow上看到這麼個答案,覺得很贊。所以寫下來,以備不時之需。 public Thread
md5Hex("中文")在main函式和tomcat環境中執行結果不同
DigestUtils.md5Hex("測試字串");在main函式和tomcat環境中執行結果不同。 原因應該是main函式執行環境和tomcat執行環境的編碼有區別導致加密結果不同; DigestUtils.md5Hex("測試字串".getBytes("iso-885
從send函式和sendto函式引數的不同看TCP和UDP的差別
sendto能聯想到客戶端地址的引數有兩個:sockfd 和 dest_addr,但在實際應用中對所有UDP客戶sockfd引數都使用同一個值,所以可以推斷這個socket是為所有UDP客戶使用的,不能看做目的客戶端的地址對映,只有dest_addr才是目的客戶端的地址對映(ip地址和埠號)。
C++中lower_bound函式和upper_bound函式 以及 sort(引數)
STL中關於二分查詢的函式有三個lower_bound 、upper_bound 、binary_search 。這三個函式都運用於有序區間(當然這也是運用二分查詢的前提),下面記錄一下這兩個函式。 ForwardIter lower_bound(ForwardIter
【C語言】printf函式和scanf函式典型例子
<span style="font-size:18px;">#include <stdio.h> void main() { int i; char c; for(i=
unity-預設函式的生命週期(執行順序)
概述 unity的API中詳細介紹了unity指令碼預設函式的執行順序,點這裡訪問。這裡主要介紹下面這張圖: 主要執行順序 編輯器->初始化->物理系統->輸入事件->遊戲邏輯->場景渲染->
C語言之格式化輸入(printf函式和scanf函式)
scanf(格式化字串,引數。。。) 以下程式碼例子: #include<stdio.h> int main() { int n=0,o=0; char str[512]=""; //陣列名稱代表陣列的地址 //提示使用者輸入一個字串。 pri
有父類的子類例項化時,子類與父類的成員變數,建構函式,程式碼塊的執行順序
package test; public class SuperC { static int i=10; SuperC(){ print(); } void print(){ System.out.println(i); } }package test; public class
執行緒控制-sigwait函式和相關函式解釋
首先看這篇文章學習執行緒和訊號:http://www.cnblogs.com/clover-toeic/p/4126594.html 然後我寫了一個小程式 #include <stdio.h> #include <pthread.h> #includ
小猿圈linux之linux下printf函式和fputs函式
這兩個函式是提供每次輸入和輸出一行程式碼的功能,小猿圈加加這篇文章詳解一下。 函式輸入 #include <stdio.
主線程和子線程執行順序問題
執行 他會 debug @override args stat 明顯 輸出 被調用 public class MyThread implements Runnable { @Override public void run() { Syst
C++11新特性——default函式和deleted函式
轉自:http://blog.jobbole.com/103669/ default函式 default函式作用於類的特殊成員函式,為其自動生成預設的函式定義體,提高程式碼的執行效率。 類的特殊成員函式: 預設建構函式 解構函式 複
C語言中static修飾的函式和普通函式的區別
用static修飾的函式,本限定在本原始碼檔案中,不能被本原始碼檔案以外的程式碼檔案呼叫。而普通的函式,預設是extern的,也就是說,可以被其它程式碼檔案呼叫該函式。 在函式的返回型別前加上關鍵字static,函式就被定義成為靜態函式。普通 函式的定義和宣告預設情況下是extern的,但靜