【发布时间】:2012-01-27 19:30:42
【问题描述】:
我知道当您通过 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;
}
【问题讨论】:
-
如果您使用的是相当现代的编译器,您应该收到关于
int temp = i;的警告。注意那些......他们可以,但你在正确的轨道上。 -
感谢大家的快速响应!每个人都非常有帮助,在阅读了每个人都写的内容后,我确实明白现在的问题是什么。我的编译器确实警告过我,尽管我认为我可以将指针的地址存储到 int 数据类型中。我猜这是不正确的。
-
我们在 C 中称它们为指针,但在许多其他语言中也有称为引用的东西。
-
所以在 swapnum() 函数的第 4 行... i=j,让我正确理解这一点,这是有效的代码行吗?如果我是正确的,它的作用是获取 j 的地址并将其存储到 i 中。所以在我的脑海中,我指向 j。这是正确的思考方式吗,如果这是为什么这只是局部的,而没有反映在主要的变化??
标签: c pointers pass-by-reference swap