使用C传递参考

Fre*_*kin 2 c swap pointers pass-by-reference

据我所知,当你通过C中的函数传递引用时,函数的参数会占用将被修改的指针的地址.我极端难以理解为什么这个通过引用传递的例子不起作用.谁能指出我正确的方向......

这应该输出一个交换但是当我编译交换时没有发生为什么这个通过引用传递不起作用?

#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);
   getchar();
   getchar();

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

bob*_*mcr 6

你忘了在函数内部取消引用你的指针.因此,您最终会重新分配本地指针值,而不是更改指向的实际值,并且它不起作用.

所以,使用*dereference运算符:

int temp = *i;
*i = *j;
*j = temp;
Run Code Online (Sandbox Code Playgroud)

  • @Fred - 请注意,如果您启用了编译器警告,他们已经选择了这个,因为您将`int*i`(一个指针)分配给`int temp`(不是指针).总是瞄准编译并启用警告,它可以节省无穷无尽的问题(`-Wall -Werror`在gcc上). (4认同)