C语言 返回指针的函数 问题

我现在对基础C语言有个疑问:就是返回指针的函数,如果你函数里面定义了一个指针变量,然后将其返回的话,那么函数结束完了那个变量不是没了吗?为什么主调函数中还能使用它返回的地... 我现在对基础C语言有个疑问:就是返回指针的函数,如果你函数里面定义了一个指针变量,然后将其返回的话,那么函数结束完了那个变量不是没了吗?为什么主调函数中还能使用它返回的地址呢?
如果是return i,主调函数知道一个i就可以了,但如果是返回一个指针的话,指针指向的地址里面的东西已经随着子函数的离去而离去了,那返回的那个地址不是已经没有意义了??????????????????
展开
 我来答
bazhu0916
2011-12-02 · 超过16用户采纳过TA的回答
知道答主
回答量:106
采纳率:0%
帮助的人:74.4万
展开全部
返回指针 要看这个局部指针变量在函数运行后 保存了哪个空间的地址了
指针里的值是可以返回的 就像你说的 “ return i,主调函数知道一个i就可以了 ”
同样主函数 知道一个指针里的地址就可以了。
但是这个地址入口的空间现在可用否,那要看具体情况了
1 此地址所指向的空间 是个局部变量 也就是存在栈区,那么在申请次局部变量的函数结束时,局部变量被释放,用户没有使用他的权限了 出错
2 此地址所指向的空间 不是局部变量,比如是个静态变量 全局变量 或者是malloc申请的存在堆中的,那么他就不是你随着函数的离去二离去了,他任然存在,结果可用 正确
追问
我写了一个子函数   int *point(void) ,在里面      int a=1; return &a;        主函数里面  int *p; p=point();  printf("*p = %d\n", *p);
按理说这样是错的,是的,编译的时候也会报错,但输出来*p = 1; 我就傻了。然后我在
p=point(); printf("*p = %d\n", *p);中间加了几句,输出来*p = 0;
会不会是可能1还在,经过一些操作后就被覆盖了,但为什么会这样?它放在哪里,栈?堆?寄存器?(ubuntu下用gcc)
追答
1 是常量
常量数据区存储字符串等在编译期间就能确定的值。类对象不能存在于这个区域中。在程序的整个生存周期内,区域中的数据都是可用的

说实话我也试了你说的。
也有点相通
dinkfamily
2011-12-05 · TA获得超过602个赞
知道小有建树答主
回答量:387
采纳率:50%
帮助的人:213万
展开全部
在你定义变量的时候,会分配一个内存给变量,指针就是告诉你这个变量存在什么,C语言不会自动回收内存(一些计算机语言会自动回收内存,如java),除非你自己编写函数清除,或则改变其值,不然指针所指向地址里面的值是不会变化的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xuexi1028
2011-12-02 · 超过24用户采纳过TA的回答
知道答主
回答量:94
采纳率:0%
帮助的人:57.2万
展开全部
LZ 你好,这个问题,如果你学过汇编语言,通过汇编调试可以看的很清楚,汇编之下,鸟无秘密
更多追问追答
追问
学过,但怎么用啊!
追答
以VC6 为例,写个程序 随便下个断点,然后,F5调试,然后 VIEW菜单,下面的disaseembly
就可以看到汇编过程,很清楚
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
navaket111
2011-12-03
知道答主
回答量:2
采纳率:0%
帮助的人:3332
展开全部
你理解的方向是对的,不过存在以下几个问题
1.指针变量简单的话就是指向内存的某个地方
2.至于“指针指向的地址里面的东西已经随着子函数的离去而离去了”,这个就要看情况,
a.如果指针指向的那块内存是自动释放的,那么它就会随“子函数的离去而离去”.例如 局部变量
b.如果那块内存不会自动释放的,那他就不会随“子函数的离去而离去”例如,用malloc()申请的内存空间
追问
我写了一个子函数   int *point(void) ,在里面      int a=1; return &a;        主函数里面  int *p; p=point();  printf("*p = %d\n", *p);
按理说这样是错的,是的,编译的时候也会报错,但输出来*p = 1; 我就傻了。然后我在
p=point(); printf("*p = %d\n", *p);中间加了几句,输出来*p = 0;
会不会是可能1还在,经过一些操作后就被覆盖了,但为什么会这样?它放在哪里,栈?堆?寄存器?(ubuntu下用gcc)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ppandcc2011
2011-12-02
知道答主
回答量:11
采纳率:0%
帮助的人:4.5万
展开全部
指针变量是存储指针的,一般在子函数中使用返回时,应该是子函数的参数也是指针,那么返回的这个指针所指空间是否释放,就看这个变量的定义范围了。
追问
那如果子函数的参数就不是指针呢,就没有参数呢?但返回的是指针
追答
那么就看你这个指针所指的空间是在哪个范围定义的了!一般主函数定义的,在主函数执行完前都会保留。子函数也是,但是随着子函数的执行结束,在子函数里定义而获得的空间也就free了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式