2016-06-24 10 views
-2

たとえば、次のような関数があるとします。C++の差--k [i]とk [i] -

void f(int *k){ 
    k++; //increments the pointer to the second element 
    (--(*k)); //what exactly does is mean? 

} 
int main(){ 
    v[]={1,2,3}; 
    f(v); //passes the pointer to the forst elemento of v 
} 

どのような順番ですか? void f(int k[3])のような機能で--k[1]があった場合はどうなりますか?それの最初の要素に -

+1

C++演算子の優先順位:http://en.cppreference.com/w/cpp/language/operator_precedence –

+0

downvotersが説明できる場合.. – Benoit

+0

[C、C++、Java、 C#](http://stackoverflow.com/questions/6457130/pre-post-increment-operator-behavior-in-cc-java-c-sharp) – flaviodesousa

答えて

0

最高のアイデアは、デバッガを開き、ステップ:)

あなたは配列へのポインタを渡す機能f(v)呼び出すことにより、ステップをチェックすることです。

f(v)の中では、まずポインタを1ずつ増やします(k++)。ここで注意しておくべきことは、渡すオブジェクトのタイプは関係ありません。常に別のオブジェクトに移動するため、オブジェクトのサイズは重要ではありません。

今すぐ(--(*k)) - あなたは*kの中身を減らします(今はarray-so 2の2番目の要素を指しています)。

結論として、関数v == {1、1、3}を終えた後。

1

C++の差--k [i]とK [i]は -

元プリデクを行います。後期は後減少する。

(--(*k)); //what exactly does is mean? 

operator*逆参照演算子です。

どのような順番ですか?

すべての式はoperator precedenceのルールに従います。カッコで囲まれたグループは、どの演算子よりも厳しい束縛をしています。

関連する問題