| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1141 人关注过本帖
标题:开辟内存空间的疑问
只看楼主 加入收藏
H
Rank: 1
等 级:新手上路
帖 子:33
专家分:5
注 册:2009-4-18
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:5 
开辟内存空间的疑问
程序1:#include <iostream.h>
#include <string.h>
class CSample
{
    char *p1, *p2;
  public:     
    void init(char *s1, char *s2);
    void print()
    {
     cout<<"p1 ="<<p1<<'\n'<<"p2 = "<<p2<<'\n';
     }
    void copy(CSample &one);
    void free();
 
};

void CSample::init(char *s1, char *s2)
{
   p1=new char[strlen(s1)+1];
   p2=new char[strlen(s2)+1];
   strcpy(p1,s1);
   strcpy(p2,s2);
}

void CSample::copy(CSample &one)
{
   if (this!=&one ) *this=one;   
}
void CSample::free()
{
   delete[] this->p1;
   delete[] this->p2;

}


void main()
{
   CSample a,b;
   a.init("My name is ","andrew");
   a.print();   
   b.copy(a);  
   b.print();
   a.free();
}






程序2:
#include <iostream.h>
#include <string.h>
class CStrOne   
{   protected:
    char *pstr;   
    public:     
    CStrOne( char str[ ])
    {   pstr=str;
    }        
    void show()
    { cout<<"strings="<<pstr<<endl;           
    }
};

class CStrTwo:public CStrOne   
{  
    char *newpstr;   
    public:     
      CStrTwo( char str1[ ],char str2[ ]):CStrOne(str1)
    {   newpstr=str2;
    }        
    void show()
    {   cout<<"strings1="<<pstr<<endl;
        cout<<"strings2="<<newpstr<<endl;           
    }

    void joint()
    { char temp[100];
      strcpy(temp, pstr);
      newpstr=strcat(temp,newpstr);
      cout<<newpstr<<endl;
     }


};


void main()
{   
   CStrTwo str("My Name is Lian",", 45 years old");
   str.show();
   str.joint();
 }

为什么程序1里来的p1和p2使用时要开内存空间,而程序2pstr赋值不用开内存空间?
搜索更多相关主题的帖子: 空间 疑问 内存 
2009-12-29 16:41
秀痘魔导士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:250
专家分:1150
注 册:2009-12-23
收藏
得分:3 
   p1=new char[strlen(s1)+1];
   p2=new char[strlen(s2)+1];
pstr=str;
指针赋值只是改变指针指向的地址,第一段代码才是开辟内存空间
2009-12-29 16:47
H
Rank: 1
等 级:新手上路
帖 子:33
专家分:5
注 册:2009-4-18
收藏
得分:0 
那为什么pstr不开辟内存空间呢?

我的意思是pstr是否一定要开辟内存空间才可以使用?

[url=http://shop59823293.]韩版 优雅 通勤 时尚女包[/url]
2009-12-29 17:01
秀痘魔导士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:250
专家分:1150
注 册:2009-12-23
收藏
得分:0 
以下是引用H在2009-12-29 17:01:04的发言:

那为什么pstr不开辟内存空间呢?

我的意思是pstr是否一定要开辟内存空间才可以使用?
不大明白你的意思,指针指向地址空间不就可以使用了吗?
2009-12-29 17:04
zb07nju
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2009-12-30
收藏
得分:2 
指针的声明一般像char* pstr =NULL;这样是比较安全的,以后你可以自己给pstr赋值,引用是必须在声明的时候就赋值的,指针的作用就是指向一个“已分配”的空间地址。
2009-12-30 17:02
yangliangbin
Rank: 2
来 自:广西
等 级:论坛游民
帖 子:66
专家分:62
注 册:2009-6-3
收藏
得分:15 
程序1:
程序代码:
void CSample::init(char *s1, char *s2)
{
   p1=new char[strlen(s1)+1];
   p2=new char[strlen(s2)+1];
   strcpy(p1,s1);
   strcpy(p2,s2);
}
这里开辟空间是为了能够过街字符串赋值,而不只是赋头指针
 CStrOne( char str[ ])
    {   pstr=str;
    } 
这里str是数组头指针、赋值给指针 pstr。知道头指针就可以输整串字符了
不懂的话看下字符指针那一章吧

相信自已……
2009-12-31 09:35
快速回复:开辟内存空间的疑问
数据加载中...
 
   



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

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