一、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.csdn.net/jeffscott/article/details/79090705
