动态内存分配
用new运算符实现动态内存分配
- 动态内存分配
- 分配一个变量
- 分配一个数组
- new运算符返回值类型
- 释放动态分配出来的内存空间
- 动态分配指针数组
分配一个变量
p=new t;
t是任意类型名,p为类型为t*的指针。
动态分配出一片大小为sizeof(t)字节的内存空间,并将该内存空间的起始地址赋值给p。
int*pn;
pn=new int;
*pn=5;
分配一个数组
p=new t[n];
t是任意类型名,p为类型为t*的指针。
n:要分配数组元素的个数,可以是整型表达式;
动态分配出一片大小为n*sizeof(t)字节的内存空间,
并将该内存空间的起始地址赋值给p。
int * p;
int i=5;
p=new int [i*20];
p[0]=100;///yes.对p[0]赋值
p[100]=100;///no,越界。
new运算符返回值类型
new t;
new t[100];
返回值都是t*。
释放动态分配出来的内存空间
delete 运算符
delete 指针;//该指针指向new出来的空间
delete []指针;
一片空间不能被delete多次。
释放动态分配的变量
int*p=new int;
*p=5;
delete p;
释放动态分配的数组
int*p=new int[20];
p[0]=1;
delete []p;
动态分配指针数组
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{char *name[5],str[15];int i,len;for(i=0;i<5;++i){gets(str);len=strlen(str);name[i]=new char[len];///可见和malloc的不同,这 里还是char。strcpy(name[i],str);}for(i=0;i<5;++i){cout<<name[i]<<;}}