指针--不能初始化?

xiaoxiao2021-02-28  38

一、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

转载请注明原文地址: https://www.6miu.com/read-2628979.html

最新回复(0)