C语言中指针动态内存的申请和释放 | 您所在的位置:网站首页 › c语言指针赋值代码 › C语言中指针动态内存的申请和释放 |
1. 指针
1.1 指针的含义:
简单来说,指针是存储内存地址的变量。当我们声明了一个指针变量后,使用该指针时系统会根据指针内的地址索引内存块,读取内存内的值。指针因为是用来存地址的,所以一般固定长度为4个字节。void指针指向内存块的指针。 指针的定义示例: int a=0; int *Pointer_a=&a;
在编写程序时我们可以使用&(引用运算符或地址运算符)获取变量或常量的地址,例如上例中获取a变量地址就是用&a。对于指针来说指针本身存储地址,加上*(解除引用运算符)读取该地址下的值。如上例,Pointer_a存放的就是a的地址,*Pointer_a就是读取a的值。 1.2 指针的运算(++和--):和数组具有相似之处,指针也可以进行地址运算。 我们可以用指针遍历数组试试: 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 实验室设备网 版权所有 |