C ++の関数は値問題を渡します

他のOOP言語とC ++の値によって、タイトルを行うための魔法の事の出現は同じではありません。まず、以下の出力が何であるかを確認するテストを行いますか?

ボイド(F INTINT B、INT C){ 
    COUT << << B << C。
} 
int型のmain()
{ 
    int型、A = 1 
    F( ++、++、++ ); 
}

私はほとんどが、それは2,2,4であるべきだと思いますね。C#は確かに結果です。C ++が、結果はそうではありません。情報を確認し、明確ではない非常に複雑な、特定のメカニズムに答えるために友人を尋ねます。値によってC ++の関数だけを知っているスタックに基づいてもよいです。

C#とは対照的に、彼は、スタックの右に、左からプッシュし始めました。偉大な神の導きを歓迎異なる意見があります

個別機能場合、このような++のような右側の出力値から開始し、第1の出力の値は、ときの出力値は2になり、++場合、2が再出力となります。しかし、出力++、++両方の場合、++即ち全て、スタックの底部の圧力であります

最後と同じ、以下の実施例における出力の値++:

    // 便宜を1に設けられている
    / * 出力424 
       なぜならスタックのフロントボトムに対してこの時点で押さ右端++シンボルのプロセスは、2の値となる
       中間++シンボルとして、その時点で出力された後には2 3の値の後に 
       この時スタック4となるように、最後の左端++シンボルはフロントを有する 
       トラバースの最終端を両方のスタック解除A出力* / 
    F(+、+、+ )。
     // 以下の実施例は、証明するよう
     // 出力321 
    °F(A ++、A ++、A ++ );
     // 出力344 
    °F(A ++、A ++、++ A);
     // 出力444 
    °F(A ++、 ++、++ A);
     // 出力222 
    °F(A、A、++ A);
     // 出力421 
    °F(++ A、A ++、A ++)。

だから、複数の番号の場合であれば?以下のように、上記、Bまたはシーケンスを参照してくださいbのを見て、個別に見られますが、その時点彼ら現在の出力値で、どこ+ bを満たすことができます。


//セットA = 1、B = 3。。
//
出力1. 3. 4。 F.(A ++、B ++、A + B); // 。出力6. 1. 3 F(A + B、A ++、B ++ ); // 出力83 3. 1. 5 F(A + B、A ++、B ++、A ++、B ++ ); // 出力3 5 6 4 2。 F.(A ++、B ++、A + B、A ++、B ++)。

サプリメントはCOUTある場合は、次のよう<<最後のコンマ式の出力に応じて出力が可能。

    INT A = 1、B = 3 // 输出4 
    COUT <<(++、B ++、+ bの、++、B ++ )。
    // 输出5     
    COUT <<(++、B ++、+ bの、++、++ B)。

 

 

おすすめ

転載: www.cnblogs.com/dlvguo/p/11902274.html