1. 程式人生 > >Printf函式和cout函式引數執行順序以及自增與自減

Printf函式和cout函式引數執行順序以及自增與自減

Printf函式和cout函式引數執行順序以及自增與自減

總結:

VC++ 6.0下:

C程式碼:

     1printf函式的執行順序是由右到左的

2、前自增運算子(++i)先加1,再使用i,此時i已經加了1

3、後自增運算子(i++)先使用i,再加1VC++6.0後自增運算是要在整條語句結束以後才自加1

C++程式碼:

1、 cout函式的執行順序是依次由右向左的。

2、 前自增運算子(++i)先加1,再使用i,此時i已經加了1

3、 後自增運算子(i++)先使用i,再加1VC++6.0後自增運算是要在<<  i++  <<結束以後才自加

1

Linux下:

在處理printf時,壓棧順序為從右往左,也就是說從右往左的計算(“計算”不等於“輸出”)。

a++++a的壓棧的區別:在計算時,遇到x++會記錄此時的x的值作為最後的輸出結果。遇到x++x的時候則不會將此時的計算結果作為最終的輸出,只會修改x的值,在最終輸出的時候都輸出x的值(所以++xx的結果總是一樣的)。

對於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函式引數的不同看TCPUDP的差別

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的,但靜