c语言中数组的四种创建方式和应用场景

数组是语言中常用的一种结构,在c语言中可以使用多种方式来创建数组,每种语法对应于不同的应用场景。

1、在声明数组时指定数组的长度

语法

复制代码
<类型> <变量>[<长度>];

当填充数组的内容为运行时动态加入时可以使用此语法,此语法根据长度预先分配空间,在运行根据业务赋予不同的值。

示例

从控制台接收2个数的输入填充数组,然后输出

复制代码
#include <stdio.h>
int main(){
    int num[2];

    for(int i = 0;i < 2 ;i++){
        int x;
        printf("请输入第%d个数:",(i +1) );
        scanf("%d",&x);
        num[i] = x;
    }
    for(int i = 0;i<2;i++){
        printf("%d\n",num[i]);
    }
}

2、使得初始值初始化长度

语法

复制代码
<类型> <变量>[] = {<初始值列表>};

当数组的值在开发时即已经确定时,可以使用此语法,比如在进行身份证最后一位的合法性验证时用到的校验码,还有小写数字转中文大写数字时的大写数字都可以使用这个语法。

示例

复制代码
#include <stdio.h>
int main(){
    int num[] = {1,2,3,4,5}; //初始化数组,数组长度为初始值的数量
    for(int i = 0;i<5;i++){
        printf("%d\n",num[i]);
    }
}

这种语法需要注意的是,它只能是一条语句,不能拆成两句来实现

复制代码
int num[];  //未指定数组的长度,无法分配空间
num = {1,2,3,4,5};

3、声明指定长度,并用部分值进行初始化

语法

复制代码
<类型> <变量>[<长度>] = {<初始值列表>};

此语法会创建一个指定长度的数组,并和初始值填充数组前面的部分,如果初始值列表大于指定的长度,则只填充指定长度的值。这种语法常用于已知固定前缀的数据,比如在定义一个信息模板数组时,信息总是以"XXX"开头,此时可以此语法。

示例

复制代码
#include <stdio.h>
int main(){
    int num[3] = {1,2,3,4,5};
    for(int i = 0;i<5;i++){
        printf("%d\n",num[i]); //只有1、2、3被填充,4和5被抛弃
    }
}

但是需要注意的是,此语法的长度只能使用常量,如果是变量会在编译时报错

复制代码
int x = 2;
int num[x] = {1,2,3,4,5};

4、使用动态方式分配数组长度

语法

复制代码
<类型> *<变量名> = malloc(sizeof(<类型>) * <长度>);

此方式可用于函数数组的返回,由于在函数内定义的数组属于函数的局部变量,在其它函数中无法访问此变量。使用malloc动态分配空间可解决此问题

示例

复制代码
#include <stdio.h>
int *fun(){
    int *num = malloc(sizeof(int) * 2); //动态创建长度为2的整型数组
    num[0] = 1;
    num[1] = 2;

    return num;
}
int main(){
    int *num = fun();
    for(int i = 0;i<2;i++){
        printf("%d\n",num[i]);
    }
}

文章来源于哔站《c语言中数组的四种创建方式和应用场景

更多学习视频和专栏文章请到哔站个人空间: 布道师学院的个人空间-布道师学院个人主页-哔哩哔哩视频

更多资源和项目下载请到:"开源吧(找实战项目和毕设项目的好网站)" ​ :开源吧

相关推荐
superman超哥3 小时前
仓颉语言中元组的使用:深度剖析与工程实践
c语言·开发语言·c++·python·仓颉
LYFlied4 小时前
【每日算法】LeetCode 153. 寻找旋转排序数组中的最小值
数据结构·算法·leetcode·面试·职场和发展
唐装鼠4 小时前
rust自动调用Deref(deepseek)
开发语言·算法·rust
ytttr8735 小时前
MATLAB基于LDA的人脸识别算法实现(ORL数据库)
数据库·算法·matlab
charlie1145141915 小时前
现代嵌入式C++教程:C++98——从C向C++的演化(2)
c语言·开发语言·c++·学习·嵌入式·教程·现代c++
雨季余静5 小时前
c语言 gb2312转utf-8,带码表,直接使用。
c语言·c语言utf8·c语言gb2312·c语言gbk·c语言gb18030·gb2312转utf8·gbk转utf8
2401_890443026 小时前
Linux 基础IO
linux·c语言
jianfeng_zhu6 小时前
整数数组匹配
数据结构·c++·算法
yueqingll7 小时前
032、数据结构之代码时间复杂度和空间复杂度的判断:从入门到实战
数据结构
smj2302_796826527 小时前
解决leetcode第3782题交替删除操作后最后剩下的整数
python·算法·leetcode