0

所以我正在查看一个应该是通过引用传递的示例的代码。这个例子来自这里:

在此处输入图像描述

当我编译它时,我得到的错误与“int temp=i”行有关:

错误 1 ​​错误 C2440:“正在初始化”:无法从“int *”转换为“int”

另一个错误与“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您传递的是 的地址i和 的地址j,因此需要指针来指向这些内存地址。要获取内存地址(指针)的值,您必须使用这种奇特的*语法取消引用它,这*i意味着指向的i

于 2013-08-11T17:48:18.383 回答