首先看一段代码
#include<stdio.h>
void swap(int* a,int* b)
{
int* temp;
*temp=*a;
*a=*b;
*b=*temp;
}
int main()
{
int a=1,b=3;
int *p,*q;
p=&a;
q=&b;
swap(p,q);
printf("%d %d\n",a,b);
printf("%d %d\n",*p,*q);
return 0;
}
这段代码是交换两个数的经典问题的代码,看上去好像没有问题,但是在运行之后你会发现代码没有运行结果,其实问题就出在指针的初始化问题之上。我们看修改之后的代码。
#include<stdio.h>
void swap(int* a,int* b)
{
int x;
int* temp;
temp=&x;//temp的初始化
*temp=*a;
*a=*b;
*b=*temp;
}
int main()
{
int a=1,b=3;
int *p,*q;
p=&a;
q=&b;
swap(p,q);
printf("%d %d\n",a,b);
printf("%d %d\n",*p,*q);
return 0;
}
我们只是增加了temp=&x这一内容,我们发现此时的代码可以运行了。
其实问题就出在指针初始化上面,指针没有初始化的时候会有一个随机指向的地址,这个地址可能是系统的工作空间,这时候是不允许修改的,所以我们的程序很大可能不会出现运行结果。
所以我们只要为temp初始化就可以很容易得到交换之后的结果。
当然,我们可以用更简洁的办法实现交换。
#include<stdio.h>
void swap(int* a,int* b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
int main()
{
int a=1,b=3;
int *p,*q;
p=&a;
q=&b;
swap(p,q);
printf("%d %d\n",a,b);
printf("%d %d\n",*p,*q);
return 0;
}