如何定义n个元素的一维数组?
因为定义数组时,它的长度值(即上面的[]中的值)不能使用变量,只能是一个常量。
动态申请内存
new运算符----用于动态申请所需的内存空间
1.动态申请单个变量
格式:指针变量 = new 类型;
注意:可以不给出所申请的变量的名称,只用指针指向它。
例如:动态申请一个double型变量,初值为100.0
double *p; //定义一个指向双精度型的指针变量p
p=new double; //动态申请一个双精度的无名变量,将其首地址存放在p中
*p=100.0;
上述代码等价于:
double *p=new double(100.0);
2.动态申请数组
格式: 指针变量 = new 类型[元素个数];
注意:上式中的元素个数可以是 常量/变量/表达式
举个例子:动态申请存放80个字符的数组
char *str; //
str=new char[80]; //动态申请具有80个元素(每个元素都是字符类型)的这样
//的一块内存空间,或者说含80个元素的无名数组,将数组
//首地址保存在指针变量str中
再举个例子:动态创建n个元素的一维整型数组
3.动态释放申请的内存
(1)动态释放单个变量
格式: delete 指针变量; //释放单个动态变量
(2)动态释放数组
格式: delete [] 指针变量; //释放动态数组
编程实现:动态创建n个元素数组并且输出数组最大元素值
#include<iostream>
using namespace std;
void input(int *p,int n); //函数声明,函数用于输入数组元素
int findmax(int *p,int n); //函数声明,函数用于找数组最大值
int main()
{
int n,*p;
cout<<"请输入n值:";
cin>>n;
p=new int[n]; //动态申请含有n个元素的无名数组
if(p==NULL){
cout<<"空间申请失败";
return 1;
}
else{
input(p,n); //输入n个元素存入p指向的无名数组
cout<<findmax(p,n); //求数组的最大值
delete []p; //释放申请的空间
}
return 0;
}
//函数定义
void input(int *p,int n)
{
int i;
for(i=0;i<n;i++)
{
cin>>*p;
p++;
}
}
int findmax(int *p,int n)
{
int max,i;
int *q; //用于保存首地址,本例可以不用
q=p;
max=*q;
q++;
for(i=1;i<n;i++)
{
if(max<*q)
max=*q;
q++;
}
return max;
}