早教吧 育儿知识 作业答案 考试题库 百科 知识分享

一个C指针问题#include#defineN10int*fun(inta[N],intn){intb[N];returnb;}main(){intw[N],*p;p=fun(w,n);}这个程序把b当函数反回值,指针P指向B数组首地址,但结果P却变成了无向指针,我不明

题目详情
一个C指针问题#include #define N 10 int *fun (int a[N],int n) { int b [N]; return b; } main () { int w[N],*p; p=fun (w,n); } 这个程序把b当函数反回值,指针P指向B数组首地址,但结果P却变成了无向指针, 我不明白的是,在P指向FUN之前,B以经反回给了FUN了,P指向FUN应该是没错的,为什么P成了无向指针了?
▼优质解答
答案和解析
这里牵扯到了一个局部变量的问题, 楼主看你的fun函数,b只是一个局部数组,它的生存区间是在fun函数中,当fun函数返回时,也就是意味着fun函数结束了,那么此时它的局部变量还存在么 b本来(指fun函数结束之前)的内存已经被释放掉了,你说p现在指向了哪儿了?? 你可以在b声明的时候加上个static修饰符就不会出现这个问题了