0

IBMは、以下の例でC ++パスを参照により説明しています(ソースを含む)。

に変更void swapnum...した場合void swapnum(int i, int j)、値渡しになりますか?

// pass by reference example
// author - ibm

#include <stdio.h>

void swapnum(int &i, int &j) {
  int temp = i;
  i = j;
  j = temp;
}

int main(void) {
  int a = 10;
  int b = 20;

  swapnum(a, b);
  printf("A is %d and B is %d\n", a, b);
  return 0;
}

ソース

4

3 に答える 3

6

値を渡す場合に実行されるスワッピングは、渡される関数内でのみ影響を受けるか、表示され、呼び出し元のコードでは表示されません。さらに、メインに戻ると、aとbが交換されていないことがわかります。そのため、番号を交換するときに、refを渡します。

それがそれが何と呼ばれるかを尋ねているだけなら、そうです、あなたは正しいです、あなたは価値を渡すでしょう。

次に例を示します。

#include <stdio.h>

void swapnum(int &i, int &j) {
  int temp = i;
  i = j;
  j = temp;
}

void swapByVal(int i, int j) {
  int temp = i;
  i = j;
  j = temp;
}

int main(void) {
  int a = 10;
  int b = 20;

  swapnum(a, b);
  printf("swapnum A is %d and B is %d\n", a, b);

  swapByVal(a, b);
  printf("swapByVal A is %d and B is %d\n", a, b);

  return 0;
}

このコードを実行すると、参照によるスワッピングによってのみ変更が持続することがわかります。つまり、メインに戻った後、値がスワッピングされます。値を渡すと、この関数を呼び出してmainに戻ると、実際にはaとbが入れ替わっていないことがわかります。

于 2010-08-03T17:55:04.143 に答える
3

はい。ただし、名前が示すように、swapnumは機能しなくなります。

于 2010-08-03T17:53:46.237 に答える
2

はい。'&'演算子は、パラメータが渡されたもののメモリアドレスを指す必要があることを指定します。

この演算子を削除すると、オブジェクトのコピーが作成され、関数に渡されます。

于 2010-08-03T17:54:20.620 に答える