1.按需取用,不浪费
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int worker[]={20, 22, 25, 19, 18, 23 ,17, 28, 30, 35};
int *salary = NULL;
int n = 0;
printf("请输入雇佣人数:");
scanf_s("%d", &n);
if (n >= 1){
salary = new int [n];
memcpy(salary, worker, sizeof(worker));
if (n > sizeof(worker)/sizeof(int)){
for (int i=sizeof(worker)/sizeof(int); i<n; i++){
*(salary+i)=18;
}
}
for (int i=0; i<n; i++){
printf("雇佣的第%d位工人的年龄为:%d\n", i+1, *(salary+i));
}
delete [] salary;
}else if (n <= 0){
printf("输入人数错误!\n");
}
system("pause");
return 0;
}
2.局部变量全局化(延长函数内赋值变量的生存周期)
#include <stdio.h>
#include <stdlib.h>
int* demo1(int n) {
int* ap = NULL;
ap = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
*(ap + i) = i;
}
return ap;
}
void demo2(int** pointer, int n) {
int* ap = NULL;
ap = (int*)malloc(n * sizeof(int));
*pointer = ap;
for (int i = 0; i < n; i++) {
*(ap + i) = i;
}
}
int main3() {
int* pointer;
int n = 10;
demo2(&pointer, n);
for (int i = 0; i < n; i++) {
printf("*(pointer + %d)=%d\n", i, *(pointer + i));
}
free(pointer);
system("pause");
return 0;
}
3. 函数内部利用堆区大内存
#include <stdio.h>
#include <stdlib.h>
void demo() {
int* ap;
ap = (int*)malloc(1024 * 1024 * 1024 * 100);
printf("demo\n");
}
int main4() {
printf("----start----\n");
demo();
printf("----end----\n");
system("pause");
return 0;
}