3

この単純なコードの実行:

int  foo(int* a){
    cout <<"a="<<a;
    *a=1;
    cout <<", *a="<<*a<<endl;
    return 0;}

int main () {
    int* ptr;
    ptr=new int[2];
    ptr[0]=0;
    ptr[1]=0;

    cout<< foo(ptr) <<" "<< ptr <<" *ptr="<< *ptr <<endl;
    cout<< foo(ptr) <<" "<< ptr <<" *ptr="<< *ptr <<endl;

    return 0;}

(Linux)につながります:

a=0x939f008, *a=1
0 0x939f008 *ptr=0
a=0x939f008, *a=1
0 0x939f008 *ptr=1

*ptr=0 が 2 行目にあり、4 行目にない理由を説明してください。「もの」はcout右から左に「取り出される」ということでしょうか?よりも - それは実際にどのように機能しますか (実行時に段階的に)?

4

1 に答える 1

5

関数への引数の評価の順序は、C++ 標準に従って未指定です。
そうかも知れない:

  • 左から右または
  • 右から左または
  • その他の注文

ここでの私の以前の回答の1つは、これを詳細かつ詳細に説明しています。

于 2012-02-27T08:18:53.590 に答える