----------------解决方案--------------------------------------------------------
#include "Stdio.h"
#include "Conio.h"
void fun(int *a, int *b)
{
int *k;
k=a; a=b; b=k;
//k=*a; *a=*b; *b=k;
printf("%d %d\n", *a, *b);
}
main(){
int a=3, b=6, *x=&a, *y=&b;
printf("%d %d\n", *x,*y);
fun(x,y);
printf("%d %d", a, b);
getch();
}
形参不能传给实参,你的为什么没传过来的原因
2楼的是通过形参操作实际内存单元进行数据交换
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]mqh21364[/un] 在 2008-4-15 15:41 的发言:[/bo]
fun(x,y)
x, y是实参。函数不改变实参的值。
fun(x,y)
x, y是实参。函数不改变实参的值。
这里 x y 是地址好不 按地址传递
----------------解决方案--------------------------------------------------------
谢谢大家,差不多明白了,还有一个小问题。
“int k”和“int *k” 为什么运行的结果都是一样呢?
[[it] 本帖最后由 艾森 于 2008-4-15 15:53 编辑 [/it]]
----------------解决方案--------------------------------------------------------
应该一样啊
int k定义k为一个int型
int *k定义k为一个指向int的指针
交换时候都是当成一个中间转换物,没啥区别,只要不超出范围就行了
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]艾森[/un] 在 2008-4-15 15:45 的发言:[/bo]
“int k”和“int *k” 为什么运行的结果都是一样呢?
“int k”和“int *k” 为什么运行的结果都是一样呢?
“int k”K 是个变量 (等量带换你知道把)“int *k” K是地址了现在(存放指针A 的地址) 也就是定义了个指针 指向指针a指向的地址 (A B指针交换) 最后又把A 的地址(也就是存放A 地址的K)给了指针B 也就是指针B志向了 K
2及指针问题 不知道我说的是不是很清楚 也就是着时候 不是等量带换问题了 而是指针交换问题了 哟兴趣可以研究
----------------解决方案--------------------------------------------------------
楼上的两位,谢谢讲解,已经清楚很多了,楼上的QQ号多少啊,要向你多学习学习啊。
----------------解决方案--------------------------------------------------------
我指针是半调子 你可以加群和别人讨论 我QQ349746814 群21135958 群主 研究到 3及指针了 你可以和他讨论 多讨论有助学习 我是这样认为的
----------------解决方案--------------------------------------------------------
呵呵,楼上的真谦虚啊,我就是指针那昏掉了。
----------------解决方案--------------------------------------------------------
fun(x,y) 中的x,y 都是局部变量 只在函数内部可见,在内存中fun(x,y)中的x,y和外部的x,y是相互独立的,其实fun(x,y)中的x,y就相当于fun.x fun.y你交换的只是fun.x,fun.y
----------------解决方案--------------------------------------------------------