0
void revalue(int r, int ar[], int n)
{
    for(int i=0; i<n;i++)
    {
        ar[i]*=r;
    }
}

だから私はこのコードがどのように機能するのか、そしてなぜそれがar[]を変更するのかと本当に混乱しています。参照やポインタではない変数を関数に渡すたびに、変数のコピーが作成され、関数のスコープから外れた後、コピーが削除されると思いました。ただし、この関数は配列値を変更します。

これはどのように可能ですか?

4

3 に答える 3

3

非常に単純です。CまたはC++のパラメーターに配列表記を使用すると、実際にポインターを渡すようにコンパイラーによってサイレントに調整されます。

IOW、あなたの関数は本当に:

void revalue(int r, int *ar, int n)

...そしてそこから、それのほとんどはかなり明確です。

于 2012-12-07T23:58:49.820 に答える
3

混乱はint ar[]、このコンテキストでは、次のように書くことと同じだとint* ar思います。C ++では、組み込み配列を値で渡すことはできません。ただし、それらは簡単にポインタに崩壊し、上記は代替表記法です。int ar[10]またはint ar[20]を使用することもでき、それも同じであることに注意してください。

于 2012-12-07T23:59:21.703 に答える
0

配列は、配列の最初の要素へのポインターに調整されるc ++では、デフォルトで参照によって渡されます。

于 2012-12-07T23:58:35.273 に答える