无法从'int *'转换为'int'

时间:2013-08-11 17:42:23

标签: c pointers pass-by-reference

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

enter image description here

当我编译它时,我得到的错误与“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;
}

1 个答案:

答案 0 :(得分: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