| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 886 人关注过本帖
标题:两次输出指针为何不同呢?
只看楼主 加入收藏
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
收藏
得分:0 

两次输出指针为何不同呢?#include <iostream.h>

int *getint(char *str)//指针函数
{
int value=100;
cout<<str<<endl;
return &value;//warning :将局部变量返回是不妥的!

}

void somefn(char *STR) //我把原来的str该为STR后以避免它与int *getint(char *str)函数中str同名
//但还是不行两次输出*pr 不同?????
{
int a=40;
cout<<STR<<endl;
}
void main()
{
int *pr=getint("input a value:"); //赋值取自返回的指针值。
cout<<*pr<<endl; //第一次输出*pr
somefn("it's uncertain:"); //这个函数调用后----------
cout<<*pr<<endl; //第二次输出*pr
//为何两次输出 的*pr不同呢?
}

2006-08-11 21:58
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 

我说的不是那个意思
不论是什么
都干扰了它的布局


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-08-11 22:30
DarkHero
Rank: 1
等 级:新手上路
威 望:2
帖 子:191
专家分:0
注 册:2006-1-14
收藏
得分:0 

因为既然用了new操作符,那么就必定需要一个delete与之配对,否则必然会产生内存泄露。因为new后面的对象是分配在该进程的堆里面的,不像栈那样有个栈顶指针来回移动,所以后者的内存分配与释放快得多,而前者分配的内存需要程序员来自己来申请和释放,并且不是连续存储的,所以就需要有个类似“表”的东东来查找那些堆空间已用,哪些未用,所以慢得多。而整个进程结束后,堆里面的东西“释放”也就无所谓了,因为整个进程所占有的空间都会被操作系统回收,何况它所拥有的堆呢。

个人拙见,不当之处多多指教:)


for( ; me.alive() ; ) { 淡泊名利,志存高远 } //Forever
2006-08-11 22:57
DarkHero
Rank: 1
等 级:新手上路
威 望:2
帖 子:191
专家分:0
注 册:2006-1-14
收藏
得分:0 
至于,为什么楼主的程序和2搂的输出不一样,那是因为:
楼主的指针指向栈里的空间,后来的数据会把它覆盖掉;而2楼指向堆里的空间,只要程序不结束或该空间不被主动地释放掉,该空间就一直不会被覆盖。

for( ; me.alive() ; ) { 淡泊名利,志存高远 } //Forever
2006-08-11 23:01
快速回复:两次输出指针为何不同呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019998 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved