C语言中指针动态内存的申请和释放 您所在的位置:网站首页 c语言指针赋值代码 C语言中指针动态内存的申请和释放

C语言中指针动态内存的申请和释放

2024-06-02 16:18| 来源: 网络整理| 查看: 265

1. 指针   1.1 指针的含义:

  简单来说,指针是存储内存地址的变量。当我们声明了一个指针变量后,使用该指针时系统会根据指针内的地址索引内存块,读取内存内的值。指针因为是用来存地址的,所以一般固定长度为4个字节。void指针指向内存块的指针。

  指针的定义示例:

int a=0; int *Pointer_a=&a;

 

  在编写程序时我们可以使用&(引用运算符或地址运算符)获取变量或常量的地址,例如上例中获取a变量地址就是用&a。对于指针来说指针本身存储地址,加上*(解除引用运算符)读取该地址下的值。如上例,Pointer_a存放的就是a的地址,*Pointer_a就是读取a的值。

  1.2 指针的运算(++和--):

  和数组具有相似之处,指针也可以进行地址运算。

  我们可以用指针遍历数组试试:

复制代码

int Array[5]={1,2,3,4,5}; int *p=Array;//Array存放的为数组的第一个元素的地址 for(int i=0;i

     int n;

     char *pc;

     cout

       for (int i=0;i

            strcpy(Name,name);

            Amount=amount;

            Price=price;

            Total_value=price*amount;  }

            ……

};//类声明结束

//下面注意如何使用:

void main(){

  int n;

  CGoods *pc,*pc1,*pc2;

  pc=new CGoods(“夏利2000”,10,118000);

  //调用三参数构造函数

  pc1=new CGoods();  //调用缺省构造函数

  cout

     CGoods pc;  //调用缺省构造函数

   CGoods pc1(pc);   //调用拷贝构造函数

} //程序执行完,对象pc1和pc将被析构,此时出错。

析构时,如用缺省的析构函数,则动态分配的堆空  

        间不能回收。

如果用有“delete Name;”语句的析构函数,则先

        析构pc1时,堆空间已经释放,然后再析构pc  

       时出现了二次释放的问题。

这时就要重新定义拷贝构造函数,给每个对象独

        立分配一个堆字符串,称深拷贝。

深拷贝——自定义拷贝构造

CGoods(CGoods & other){ //自定义拷贝构造

            this->Name=new char[21];

            strcpy(this->Name,other.Name);

            this->Amount=other.Amount;

            this->Price=other.Price;

            this->Total_value="/blog/other.Total_value;}

例子:定义copy structor和拷贝赋值操作符(copy Assignment Operator)实现深拷贝。 //学生类定义:

class student{

     char *pName; //指针成员

public:

     student();

     student(char *pname);

     student(student &s); //拷贝构造函数

     ~student();

     student & operator=(student &s);

                                    //拷贝赋值操作符

};

//缺省构造函数:

student::student()

 {   pName=NULL; cout



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有