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


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

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

    语法

    <类型> <变量>[<长度>];

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

    示例

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

    1. #include <stdio.h>
    2. int main(){
    3.     int num[2];
    4.     for(int i = 0;i < 2 ;i++){
    5.         int x;
    6.         printf("请输入第%d个数:",(i +1) );
    7.         scanf("%d",&x);
    8.         num[i] = x;
    9.     }
    10.     for(int i = 0;i<2;i++){
    11.         printf("%d\n",num[i]);
    12.     }
    13. }

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

    语法

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

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

    示例

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

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

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

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

    语法

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

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

    示例

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

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

    1. int x = 2;
    2. int num[x] = {1,2,3,4,5};

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

    语法

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

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

    示例

    1. #include <stdio.h>
    2. int *fun(){
    3.     int *num = malloc(sizeof(int) * 2); //动态创建长度为2的整型数组
    4.     num[0] = 1;
    5.     num[1] = 2;
    6.     return num;
    7. }
    8. int main(){
    9.     int *num = fun();
    10.     for(int i = 0;i<2;i++){
    11.         printf("%d\n",num[i]);
    12.     }
    13. }


     

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

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

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

  • 相关阅读:
    记一次 .Net+SqlSugar 查询超时的问题排查过程
    通过X射线光刻在指尖大小的芯片中产生高精度微光学元件的晶圆级制造
    Datatables插件的使用(从前台到后台完整流程)
    L11.linux命令每日一练 -- 第二章 文件和目录操作命令 -- rename和basename命令
    Python-公共操作与推导式
    2023-5-22-C++异常处理机制学习
    [附源码]java毕业设计基于Web的美食网站的设计与实现
    libtorch c++ 定义全链接网络
    Linux文本处理三剑客(grep,sed,awk)
    Jackson 库中的 ObjectMapper
  • 原文地址:https://blog.csdn.net/ouyangqing/article/details/133902682