0

だから私は、参照渡しの例であるはずのコードを見ています。この例は次のとおりです。

ここに画像の説明を入力

コンパイルすると、ここに表示されるエラーは「int temp = i」行に関連しています。

エラー 1 エラー C2440: 'initializing': 'int *' から 'int' に変換できません

もう 1 つのエラーは、「j = temp」行に関連しています。

エラー 2 エラー C2440: '=': 'int' から 'int *' に変換できません

私はそれがポインタと関係があると推測しています。単純な解決策であると確信しているため、ここでポインターについての知識が不足していることで炎上することを期待していますが、このコードを正確に見ているのはそのためであることを覚えておいてください!

コード:

#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

1 に答える 1

2

問題はスワップ機能にあります。スワップ関数は次のようになります。

void swapnum( int *i, int *j ) {
  // Checks pre conditions.
  assert( i != NULL );
  assert( j != NULL );

  // Defines a temporary integer, temp to hold the value of i.
  int const temp = *i;

  // Mutates the value that i points to to be the value that j points to.
  *i = *j;
  // Mutates the value that j points to to be the value of temp.
  *j = temp;
}

...これは、ijがポインターであるためです。を呼び出すときに、 のアドレスと のswapnumアドレスを渡していることに注意してください。したがって、これらのメモリ アドレスを指すにはポインターが必要です。メモリ アドレス (ポインタ) の値を取得するには、この派手な構文を使用して逆参照する必要がありますij**i i

于 2013-08-11T17:48:18.383 に答える