十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
C语言学习资源汇总,史上最全面总结,没有之一
C/C++学习资源(百度云盘链接)
计算机二级资料(过级专用)
C语言学习路线(从入门到实战)
编写C语言程序的7个步骤和编程机制
C语言基础-第一个C程序
C语言基础-简单程序分析
VS2019编写简单的C程序示例
简单示例,VS2019调试C语言程序
C语言基础-基本算法
C语言基础-数据类型
C语言中的输入输出函数
C语言流程控制语句
C语言数组——一维数组
C语言数组——二维数组
C语言数组——字符数组
C语言中常用的6个字符串处理函数
精心收集了60个C语言项目源码,分享给大家
C语言核心技术——函数
C代码是怎样跑起来的?
C语言实现字符串的加密和解密
C语言——文件的基本操作
使用C语言链表创建学生信息并且将信息打印输出
图解C语言冒泡排序算法,含代码分析
实例分析C语言中strlen和sizeof的区别
开发C语言的3款神器,VS2019、VScode和IntelliJ Clion
动图图解C语言选择排序算法,含代码分析
动图图解C语言插入排序算法,含代码分析
C语言指针数组和数组指针详解
5分钟搞懂C语言中的传值和传址
C语言实例专栏(持续更新中…)
什么是动态数组?动态数组是相对于静态数组而言的,从“动”字可以看出它的灵活性。静态数组的长度是预先定义好的,在整个程序中,一旦给定数组大小后就无法改变。而动态数组则不然,它可以根据程序需要重新指定数组大小。动态数组的内存空间是由堆动态分配的,通过执行代码为其分配存储空间,只有程序执行到分配语句时,才为其分配存储空间。
动态数组和一般数组(静态数组)的区别在创建动态数组的过程中要遵循一个原则,那就是从外层向里层逐层创建,从里层向外层逐层释放。如果要创建一个N维的动态数组,那么要从第一维开始创建,直到第N维为止;而释放时与创建时相反,即从第N维开始释放,直到第一维为止。下面我们一起来看看一维动态数组和二维动态数组。
一维动态数组类型说明符* 数组名 = (类型说明符*)malloc(数组长度*sizeof(类型说明符))
//
// Created by 冲哥 on 2022/11/26.
// 微信关注【C语言中文社区】,免费领取500G学习资料
//
#include#includeint main() {int n; //用来接收要创建的一维动态数组的长度
int *arr;
printf("请输入所要创建的一维动态数组的长度:");
scanf("%d", &n);
if ((arr = (int *) malloc(sizeof(int) * n)) == NULL) {//使用malloc来动态分配内存
printf("分配内存空间失败!\n");//如果内存分配失败,报错异常退出
return -1;
}
for (int i = 0; i< n; i++) {//通过循环给数组赋值并在控制台进行打印
arr[i] = i + 1;
printf("%d\t", arr[i]);
}
free(arr); //释放内存空间
return 0;
}
请输入所要创建的一维动态数组的长度:8
1 2 3 4 5 6 7 8
二维动态数组类型说明符** 数组名 = (类型说明符**)malloc(第一维长度*sizeof(类型说明符*))
for(int i=0;i<第一维长度;i++){数组名[i]=(类型说明符*)malloc(第二维长度*sizeof(类型说明符))
}
//
// Created by 冲哥 on 2022/11/26.
// 微信关注【C语言中文社区】,免费领取500G学习资料
//
#include#includeint main() {int n1, n2;
int **arr;
printf("请输入所要创建的动态数组的第一维长度:");
scanf("%d", &n1);
printf("请输入所要创建的动态数组的第二维长度:");
scanf("%d", &n2);
if ((arr = (int **) malloc(n1 * sizeof(int *))) == NULL)//使用malloc给第一维分配内存
{printf("分配内存空间失败!\n");//如果内存分配失败,报错异常退出
return -1;
}
for (int i = 0; i< n1; i++) {if ((arr[i] = (int *) malloc(n2 * sizeof(int))) == NULL)//使用malloc给第二维分配内存
{printf("分配内存空间失败!\n");//如果内存分配失败,报错异常退出
return -1;
}
}
for (int i = 0; i< n1; i++) {//通过循环给数组赋值并在控制台进行打印
for (int j = 0; j< n2; j++) {arr[i][j] = i * n2 + j + 1;
printf("%d\t", arr[i][j]);
}
printf("\n");
}
for (int i = 0; i< n1; i++) {free(arr[i]);//释放第二维
}
free(arr);//释放第一维
return 0;
}
请输入所要创建的动态数组的第一维长度:5
请输入所要创建的动态数组的第二维长度:4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
17 18 19 20
代码中的注释已经写的很详细了,如果还有什么疑问欢迎评论区留言。
如果您觉得本篇文章对您有帮助,请点赞,转发给更多的人。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧