C++ 动态申请一维数组 (无参类型)
在编程过程中,我们经常会使用数组来存放数据,因此需要直接申请足够大的空间来保证数组访问不会越界,但是即便这样,我们依然不 能 保证空间足够分配,浪费空间,而且有时也会报错所以我们需要动态申请。C语言中使用malloc和free动态分配内存和释放内存,在C++中保留了这两个函数而且使用new和delete更简单的进行内存的分配和释放。
运算符new用于内存分配的基本形式:
int *p=new int[n]; //定义一个整型指针变量p,new动态分配存放一个整数的内存空间,将首地址赋给指针变量p;
运算符delete用于释放分配内存的基本形式:
delete[] p;(首地址已经存放在指针变量p中)
下面是使用new和delete的一个例子:
动态创建
void *createArray(int n, size_t bytes)
{
char *arr = NULL;
arr = new char[n*bytes];//动态分配内存
return (void *)arr;//强制转换为无参类型
}
源代码如下:
#include<iostream>
using namespace std;
void *createArray(int n, size_t bytes)
{
char *arr = NULL;
arr = new char[n*bytes];//动态分配内存
return (void *)arr;//强制转换为无参类型
}
deleteArray(char *arr)//释放分配内存
{
delete[] arr;
arr = NULL;
}
void input(char *arr, int n)//输入
{
cout << "input elements of array:";
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
}
void output(char *arr, int n)//输出
{
for (int i = 0; i < n; i++)
{
cout << arr[i]<<'\t';
}
}
int main()
{
int n;
cout << "input n:";
cin >> n;
char *arr;
arr= (char *)createArray(n, 4);//调用createArray函数,动态创建
input(m, n);
output(m, n);
delete[] arr;//动态释放连续的内存空间
arr= NULL;
return 0;
}
该程序定义了一个char型指针变量arr,用new分配了一块存放一维数组的内存空间,将首地址赋给指针arr,,然后在这内存块中赋值并打印出来,最后释放arr所指向的内存空间。