先推荐一个网站 http://en.cppreference.com/w/c
这个网站可以在线查询C的一些api
内存的开辟需要3个函数
malloc 动态开辟内存
free 释放内存
realloc
1.静态内存的开辟
void staticlloc(){
int arr[5];// 静态开辟 0.8M
int i = 0;
for (; i < 5; i++)
{
arr[i] = i;
printf("%d, %p\n", *(arr + i), arr + i);
}
}
2.动态内存开辟
void dynamiclloc(){
int* arr = (int*)malloc(1 * 1024 * 1024 * sizeof(int)); // 40M
// 第二个重要的方法,手动释放 free , 释放arr这一块内存
free(arr);
}

使用场景
void main(){
// 假设我们现在需要接收用户所输入的数,然后进行排序
int num;
printf("请输入数的个数:");
// 获取用户输入的值
scanf_s("%d",&num);
// 定义一个数组来存放用户的数据
// int arr[num]; 静态开辟,内存大小不能改变
int* arr = (int*)malloc(sizeof(int)*num);
// for 循环接收
int i = 0;
int print_num;
for (; i < num;i++){
printf("请输入第%d个的值:",i);
scanf_s("%d", &print_num);
arr[i] = print_num;// arr[i] = *(arr+i)
printf("%d, %p\n", *(arr + i), arr + i);
}
// 排序 堆排序(4个小时),快排序
free(arr);
getchar();
}
// 改变内存空间大小
void main(){
int num;
printf("请输入数的个数:");
// 获取用户输入的值
scanf_s("%d", &num);
// 5 个值
int* arr = (int*)malloc(sizeof(int)*num);
int i = 0;
int print_num;
for (; i < num; i++){
arr[i] = i;// arr[i] = *(arr+i)
}
printf("开辟内存的指针:%p\n",arr);
// 再加点内存
printf("请输入新增的个数:");
// 获取用户输入的值
int new_num;
scanf_s("%d", &new_num);// 5
// 原来那块内存的指针,总的大小(原来的大小+新的大小)
int* new_arr = (int*)realloc(arr, sizeof(int)*(num+new_num));
if (new_arr){// = if(new_arr != NULL)
i = new_num;
for (; i < (num + new_num); i++){
arr[i] = i;// arr[i] = *(arr+i)
}
printf("新开辟内存的指针:%p\n", new_arr);
// 打印数组
i = 0;
for (; i < num + new_num; i++){
printf("%d, %p\n", *(arr + i), arr + i);
}
}
if (new_arr){
// 如果成功了,只要释放新的地址就行
free(new_arr);
new_arr = NULL;
}
else{
// 如果没有成功,释放原来的内存
free(arr);
}
// 不要反复去释放,那块地址一旦被释放,就有可能会被新的应用占用,不要去再次释放
// free(new_arr);
// 工作 C/C++ 精通
getchar();
}

网友评论