int n;
cin>>n;//输入你所需要的数组内数据个数
int *a = new int[n]; //动态分配的数组a存放在内存中的堆中
for(int i=0;i<n;i++)
{
cin>>a[i];//输入数组
}
for(int i=0;i<n;i++)
{
cout<<a[i];//输出数组
}
//使用完后要手动释放内存,否则会内存泄漏
delete [] a; //数组应该加上[]表明是个数组,虽然不加也不报错,但是有内存泄漏的风险
a=0; //将a赋值0,上面的删除虽然释放了内存占用的空间,但是变量a并没有消失,这里置零是为了避免a成为野指针
一维数组做函数形参的话,使用以下形式
void fun(int *a/int a[],int n)
下面写一个例题,里面将用到一维动态数组和筛选素数和冒泡排序这三大块内容
【问题描述】编写程序,从任意n个数中找出素数,计算素数之和,并按从大到小顺序排序。
【输入形式】输入分2行:第一行为n的值,第二行为n个整数;
【输出形式】输出分2行:第一行为素数之和,第二行为素数排序结果。
【样例输入】
5
1 3 5 2 0
【样例输出】
10
5 3 2
【样例说明】数列1、3、5、2、0中的素数是3、5、2,它们的和是10,对它们从大到小排序,结果是5 3 2
#include<iostream>
using namespace std;
int n;
int num;
int* f = new int[num];
int prime(int n)
{
bool flag = 1;
if (n < 2)
{
flag = 0;
}
else
{
for (int i = 2; i * i <= n; i++)
{
if (n % i == 0)
{
flag = 0;
break;
}
}
}
return flag;
}//筛选素数
void maopao()
{
if (num == 0)
{
return;
}
for (int i = 0; i < num - 1; i++)
{
for (int j = 0; j < num - i - 1; j++)
{
if (f[j] < f[j + 1])
{
swap(f[j], f[j + 1]);
}
}
}
}
//冒泡排序
int main()
{
cin >> n;
int* a = new int[n];
int sum = 0;
for (int i = 0; i < n; i++)
{
cin >> a[i];
if (prime(a[i]))
{
f[num++] = a[i];
sum += a[i];
}
}
maopao();
cout << sum << endl;
for (int i = 0; i < num; i++)
{
cout << f[i] << " ";
}
cout << endl;
delete[] a;
a = 0;
delete[] f;
f = 0;
return 0;
}
本来一开始我的代码是这样的
#include<iostream>
using namespace std;
int n;
int num=0;
int prime(int n)
{
bool flag=1;
if(n<2)
{
flag=0;
}
else
{
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
flag=0;
break;
}
}
}
return flag;
}//筛选素数
void maopao()
{
int f[num];
if(num==0)
{
return ;
}
for(int i=0;i<num-1;i++)
{
for(int j=0;j<num-i-1;j++)
{
if(f[j]<f[j+1])
{
swap(f[j],f[j+1]);
}
}
}
}
//冒泡排序
int main()
{
cin>>n;
int *a=new int[n];
int *f=new int[num];
int sum=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
if(prime(a[i]))
{
f[num++]=a[i];
sum+=a[i];
}
}
maopao();
cout << sum<< endl;
for (int i = 0; i < num; i++)
{
cout << f[i] << " ";
}
cout << endl;
return 0;
}
输入10出来的是2 3 5,但是按理来说应该是5 3 2;
原因:
maopao函数里面的f数组合插入元素的数组f根本就是两个东西,所以排序无效
int num=0;初始化为0,new int[0]的后续使用会导致数组索引越界,可能会引发异常.
总觉得在现在的学习过程中使用new定义动态数组确实挺麻烦的,但是这个还是很有用。需要注意delete释放内存