void Swap(int a ,int b)
{
int tmp =a;
a=b;
b=tmp;
}
int main()
{
int a = 10,b=20;
Swap(a,b);
printf(“%d,%d”a,b);
return 0;
}
我们发现a b的 值并没有变换。因为上述的a b 仅仅实现了在Swap函数中的交换,对主函数没有变化;
void Swap(int *a ,int b)
{
int tmp =a;
a=b;
b=tmp;
}
int main()
{
int a = 10,b=20;
Swap(a,b);
printf(“%d,%d”a,b);
return 0;
}
这次代码没有实现的主要原因是:我们只是实现了a b 地址的交换,值却没有改变;
void Swap(int a ,int b)
{
int* tmp ;
- tmp =*a;
*a=*b;
*b=*tmp;
}
int main()
{
int a = 10,b=20;
Swap(a,b);
printf(“%d,%d”a,b);
return 0;
}
本质上来看,其实有在传指针和解引用,
但是因为我们没有对刚刚定义并未初始化的指针tmp赋值,tmp是一个野指针;
这个指针可能不存在,也可能不知道指向何处,所以解引用是未知的,必然会
导致系统的崩溃;
接下来看看正确的版本
在这里插入代码片
正确版本
void Swap(int *a ,int* b)
{
int tmp ;
tmp =*a;
*a=*b;
*b= tmp;
}
int main()
{
int a = 10,b=20;
Swap(a,b);
printf(“%d,%d”a,b);
return 0;
}
函数里不定义指针,因为解引用后的a是int类型,我们将TMP直接定义为整形类型;
想要通过函数实现变量的改变,必须要传指针,再解引用对其进行操作
同理,我们如果想要对一级指针进行修改, 传指针的地址,也就是二级指针,
然后解引用就ok了!