#include<stdio.h>
void fun1(int *a,int *b);
void fun2(int *a,int *b);
void fun3(int *a,int *b);
int main()
{
int i=10,j=20,*x=&i,*y=&j;
//fun1(x,y);printf("%d %d",*x,*y); 输出10 20
//fun2(x,y); printf("%d %d",*x,*y);输出10 10
fun3(x,y); printf("%d %d",*x,*y); //输出20 10
return 0;
}
void fun1(int *a,int *b)
{
int *temp;
temp=a;
a=b;
b=temp;
}
void fun2(int *a,int *b)
{
int *temp;
*temp=*a;
*a=*b;
*b=*temp;
}
void fun3(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
/*
(1) 对与第一个fun1()函数
为什么他们的值没有发生改变呢? 我的理解是,fun()函数中
是a,b的地址调换了 应该是改变了值才对 应该是20 10,但是
他们没有改变。
(2)对与第二个fun2()函数
*temp,*a,*b他们是指针变量所指向的值发生变化,应该不会影响实参i,j吧
但是和我想的不一样。
(3)对与第三个fun3()函数
为什么就改变了呢?
*/
指针本质上是一个代表地址的整数,用于寻址,强制类型转换确实可以赋值给整型。
但是并不是所谓的地址调换,所以是你对指针的理解错误了。
你这样在整型和指针之间乱转类型,尤其直接把拿 int 的值去寻址,八成都改了不知道哪里的内存了。
吐槽下你的编译器:
1.一个 (int 型的 a) 居然可以被赋值给一个 (指针 temp) 而不用显示强制类型转换。
2.居然可以把一个(int 型的 a)直接 *a 就当作指针用。