免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: flyszh
打印 上一主题 下一主题

[函数] 为什么我的指针函数返回的值不对? [复制链接]

论坛徽章:
0
31 [报告]
发表于 2004-12-30 12:45 |只看该作者

为什么我的指针函数返回的值不对?

[quote]原帖由 "assiss"]我觉得这个题目不用探讨,就可以知道它是错的.任何一本教材都应该提过变量的作用域和生存期的问题..........[/quote 发表:


也许在C++方面我是应该多看看教材,但是我相信一个好的程序员是不会放过自己碰到的每一个问题的。当然,你绝对是一个好程序员。

论坛徽章:
0
32 [报告]
发表于 2004-12-30 12:52 |只看该作者

为什么我的指针函数返回的值不对?

原帖由 "flyszh" 发表:


也许在C++方面我是应该多看看教材,但是我相信一个好的程序员是不会放过自己碰到的每一个问题的。当然,你绝对是一个好程序员。

对不起,也许我的话有点过分了.
我也相信,一个好的程序员是不会放过自己碰到的任何问题.但是,有问题应该浅尝辄止,有些问题才值得深究.人的精力毕竟有限.希望你把有限的精力,投入到值得投入的问题中去.

论坛徽章:
0
33 [报告]
发表于 2004-12-30 13:18 |只看该作者

为什么我的指针函数返回的值不对?

最近灌水多了,自我检讨一下,下不为例

论坛徽章:
0
34 [报告]
发表于 2004-12-30 13:18 |只看该作者

为什么我的指针函数返回的值不对?

原帖由 "flyszh" 发表:
每次运行两个地址都是一样的,我相信不是巧合。我修改以后就是对的了
#include <iostream.h>;

int *getP(int &a)
{
        int *p=&a;
        cout<<"p:"<<p<<endl;
        cout<<"*p:"<<..........


如果研究一下如何生成汇编代码就清楚了,
形参的地址是在堆栈中的,返回以后,堆栈弹出,在调cout的时候该指针内容被新的参数覆盖。
我的经验,绝大部分C/C++的问题当你了解了CPU相关知道和编译器如何生成代码后,都很容易理解和解决。

论坛徽章:
0
35 [报告]
发表于 2004-12-30 13:54 |只看该作者

为什么我的指针函数返回的值不对?

[quote]原帖由 "converse"]最近灌水多了,自我检讨一下,下不为例[/quote 发表:


^_^,我的话多了点,我检讨

论坛徽章:
0
36 [报告]
发表于 2004-12-30 14:05 |只看该作者

为什么我的指针函数返回的值不对?

通过跟大家学习,我总结三点:
1、传递参数的时候,尽量传递对象的引用。
2、尽量不要试图返回一个在函数内部定义的对象的指针或者引用。
3、需要返回一个对象的时候不要强行返回这个对象的指针或者引用。


不知道我说的对不对?向同志们学习

论坛徽章:
0
37 [报告]
发表于 2004-12-30 17:39 |只看该作者

为什么我的指针函数返回的值不对?

有谁能和我说一下形参 a 的地址是哪里分配的呢? 它是实参的一个拷内,
但是在哪里分配(一个匿名)呢? 不会在栈里面吧!

  比如下面的   

         return 11+21;

  如何解释,产生一个匿名变量,返回的值存放在哪里;

  int f(){
            int i=0;
            return i;     
}

   将 i 存到哪里去呢?然后将函数所占用的栈空间释放。

论坛徽章:
0
38 [报告]
发表于 2004-12-30 17:43 |只看该作者

为什么我的指针函数返回的值不对?

一般是放在一个默认的寄存器里,不会生成“匿名变量”,也不压栈。

编译器相关的,你可以看看不同编译器生成的汇编代码。

论坛徽章:
0
39 [报告]
发表于 2005-01-01 17:35 |只看该作者

为什么我的指针函数返回的值不对?

原帖由 "xmumu" 发表:
有谁能和我说一下形参 a 的地址是哪里分配的呢? 它是实参的一个拷内,
但是在哪里分配(一个匿名)呢? 不会在栈里面吧!

  比如下面的   

         return 11+21;

  如何解释,产生一个匿名变量,返回..........

对于 x86 一般是放在 eax 里。

论坛徽章:
0
40 [报告]
发表于 2005-01-01 21:41 |只看该作者

为什么我的指针函数返回的值不对?

一般返回码使用第一个寄存器,如EAX、R0等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP