所以我正在看一个代码,它应该是一个通过引用传递的例子。 这个例子来自这里:
当我编译它时,我得到的错误与“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;
}
答案 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;
}
...这是因为i
和j
是指针。请注意,当您调用swapnum
时,您正在传递i
的地址和j
的地址,因此需要指针指向这些内存地址。要获取内存地址(指针)的值,您必须使用这种花哨的*
语法取消引用它,*i
隐含的值 i
点。