2017.8.21 动态分配和撤销内存的运算符new和delete
来源:互联网 发布:淘宝客商城源码 编辑:程序博客网 时间:2024/04/30 10:46
c++使用new和delete运算符来进行内存分配和撤销(而c语言是采用malloc和free函数)。是运算符,不是函数,因而执行效率高。
new运算符返回的是指针(地址):
例子:
new int;//开辟空间 存放整数,返回地址new int(100);//开辟空间 存放整数,赋值为100,返回地址;new char[10];//开辟空间 存放字符数组,包括10个,返回首元素地址;new int[5][4];//开辟空间 存放二维数组,返回首元素地址;float *p=new float(3.1415926)//开辟空间,存放实数3.1415926,将返回地址赋给指针变量p;
delete运算符:
delete p;//释放单个变量空间delete []pt;//释放数组变量空间
开辟空间存放结构体变量
空间大小由系统自动算出,不必指定;虽然没有定义struct变量,但可以通过指针p访问这一空间。
要访问无名结构体变量,可以通过定义指针p进行访问。
#include <iostream>;#include <string>;using namespace std;struct Student//起初读了个分号导致错误{string name;int num;char sex;};int main (){Student *p;//定义一个指向结构体变量的指针变量p=new Student;//用new开辟一个存放Student型数据的空间p->name="Wang Fun";p->num=10123;p->sex='m';//字符串和字符是不一样的cout<<p->name<<endl<<p->num<<endl<<p->sex<<endl;delete p;return 0;}
动态链表未看呢。
共用体
几个变量共同占用同一段内存的结构。
union data
{int i;
…….
}
和struct的区别:
struct变量所占用长度为各成员长度内存之和;
共用体变量所占用长度为最长成员长度;
成员访问方式:
不可以只引用单个变量,如cout<
例题
问题1:定义结构体变量,输入年月日,计算是第几天,注意闰年问题。
近乎枚举的方法:主函数内完成计算。
#include <iostream> using namespace std; struct { int year; int month; int day; }date; int main() {int days; cout<<"input year,month,day:"; cin>>date.year>>date.month>>date.day; switch(date.month) { case 1: days=date.day; break; case 2: days=date.day+31; break; //二月统一按照28天算,然后根据年份的闰年情况和月份判断是否加1 case 3: days=date.day+59; break; case 4: days=date.day+90; break; case 5: days=date.day+120; break; case 6: days=date.day+151; break; case 7: days=date.day+181; break; case 8: days=date.day+212; break; case 9: days=date.day+243; break; case 10: days=date.day+273; break; case 11: days=date.day+304; break; case 12: days=date.day+334; break; } //年份能被4整除,但不能被100整除;或者能被400整除 并且月份要大于等于3 if ((date.year %4== 0 && date.year % 100 != 0||date.year % 400 == 0) && date.month >=3) days+=1; cout<<date.month<<"/"<<date.day<<" is the "<<days<<"th day in "<<date.year<<"."<<endl; return 0; }
问题2:采用函数days实现计算。将主函数的年月入传递给函数days,计算后结果传回主函数输出。
#include <iostream> using namespace std; struct y_m_d {int year; int month; int day; }; y_m_d date; //结构体变量的声明和定义int main() {int days(int,int,int); /* 对 days 函数的声明 */ int day_sum; cout<<"input year,month,day:"; cin>>date.year>>date.month>>date.day; day_sum=days(date.year,date.month,date.day); cout<<date.month<<"/"<<date.day<<" is the "<<day_sum<<"th day in "<<date.year<<endl; return 0; } int days(int year,int month,int day) /* 定义 days 函数 */ {int day_sum,i; int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //采用数组变量存储各月份值 day_sum=0; for (i=1;i<month;i++) day_sum+=day_tab[i]; day_sum+=day; //加上本月的天数 if ((year%4==0 && year%100!=0 || year%4==0) && month>=3) day_sum+=1; return(day_sum);
阅读全文
0 0
- 2017.8.21 动态分配和撤销内存的运算符new和delete
- new和delete运算符用于动态分配和撤销内存的运算符
- new和delete运算符用于动态分配和撤销内存的运算符
- new和delete运算符用于动态分配和撤销内存的运算符
- 动态分配/撤销内存new和delete
- C++动态分配内存(new)和撤销内存(delete)
- C++动态分配内存(new)和撤销内存(delete)
- 动态分配内存 and malloc&new and 数组的动态分配、初始化(memset)和撤销(delete)
- 用new和delete运算符进行动态分配和撤销存储空间
- 第十五周 项目3:(2)用new和delete运算符进行动态分配的撤销存储空间
- 数组的动态分配(new)、初始化(memset)和撤销(delete)
- C++数组的动态分配(new)、初始化(memset)和撤销(delete)
- 二维数组的动态分配(new)、初始化(memset)和撤销(delete)
- C++ 动态分配内存的(new)之撤销内存的(delete)
- c++中使用new和delete动态分配内存
- 运算符new和delete的重载
- new和delete运算符
- new和delete运算符
- 注解
- kafka学习二:在linux环境下kafka搭建环境(单机版)
- 浅析统计学、数据挖掘、机器学习和AI的区别和关系
- 键盘按下抬起 简单应用
- JavaScript基础
- 2017.8.21 动态分配和撤销内存的运算符new和delete
- 基础程序设计结构
- Xcode Git 版本管理
- Windows服务之实现对服务的控制管理
- oracle 学习笔记
- 打印普通二叉树最大搜索子树
- Android 6.0权限判断封装的基类 实用在activity和fragment中
- Java关于Properties用法
- **java数组随笔**