一、Code First
#include<stdio.h>
void swap(int*a,int*b);
int main()
{
int a=1;
int b=2;
printf("a=%d,b=%d",a,b);
swap(&a,&b);
printf("a=%d,b=%d",a,b);
return 0;
}
void swap(int*a,int*b)
{
int *temp=NULL;//定义指针并初始化为NULL
*temp=*a;
*a=*b;
*b=*temp;
}
从运行结果可以看出,典型的非法访问内存引起的程序崩溃,问题出在哪?不急,我们再来看一段代码:
#include<stdio.h>
void swap(int*a,int*b);
int main()
{
int a=1;
int b=2;
printf("a=%d,b=%d\n",a,b);
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
void swap(int*a,int*b)
{
int x=0;
int *temp=&x;//定义指针并初始化为x的地址
*temp=*a;
*a=*b;
*b=*temp;
}从结果看,运行一切正常!
二、分析总结
两段代码对比说明,指针初始化后指向的地址空间是有区别的,当指针指向一块常量区时,是不能改变其值的。
更深入理解这个问题,参加笔者另一篇博文:http://blog.youkuaiyun.com/jeffscott/article/details/79090705
1102

被折叠的 条评论
为什么被折叠?



