C++的语法中是用new 和delete来 分配和删除内存。
#include<iostream>
using namespace std;
void print(int* array,int len){//方法用于打印学生的成绩
for(int i=0;i<len;i++){
cout<<"学生"<<i<<"的成绩"<<array[i]<<endl;
}
}
int main(){
int len;
int add;
int sum=len+add;
cout<<"请输入学生总数"<<endl;
cin>>len;
int *grade;
grade=new int[len];//动态数组,分配内存
for(int i=0;i<len;i++){
cout<<"请输入学生"<<i<<"的成绩"<<endl;
cin>>*(grade+i);
}
print(grade,len);
delete []grade;//用完以后删除
grade=new int[add];//重新分配
cout<<"请输入增加学生的数量"<<endl;
cin>>add;
for(int j=len;j<(add+len);j++){
cout<<"请输入第"<<j<<"个学生的成绩"<<endl;
cin>>*(grade+j);
}
print(grade,add+len);
delete []grade;//删除
return 0;
}
程序很简单,不过有一点。打印结果很悲剧,不是我想要的结构
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
请输入学生总数
2
请输入学生0的成绩
89
请输入学生1的成绩
90
学生0的成绩89
学生1的成绩90
请输入增加学生的数量
2
请输入第2个学生的成绩
909
请输入第3个学生的成绩
89
学生0的成绩-842150451
学生1的成绩-842150451
学生2的成绩909
学生3的成绩89
Press any key to continue
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我想重新打印学生的成绩。可是 学生0和1的成绩却找不到,当然是我已经删除了第一次分配的内存。所以,当我重新分配的时候,程序只知道我 重新分配的
那块内存,也就是2和3的成绩。如果是覆盖的话,可能效果就会出来。不知道 我这样理解 对还是不对。如有看到小弟文章的大神 请指点。