当前位置: 首页 > article >正文

C语言进阶-数组和函数

C语言

一、数组
一维数组
    通过数组,可以一次性的分配多个同类型的连续存储区
    语法:
    类型 数组名字[元素个数]; 例:int arr[6]; arr占用内存6个整型大小的连续存储空间
    注意:
        通过下标可以区分数组的每个元素
            c语言数组下标从0开始,没有负数
            下标从0开始,一次加一
            arr[0] 表示数组中第一个元素
        数组的每个元素都可以独立的使用
        ***数组在使用时,要注意下标的范围,避免越界***
        每次程序运行,数组所占用的内存空间可能都不一样,这要看系统分配的内存位置
    数组初始化
        int arr[5] = {10, 20, 30, 40, 50}; // arr[0] = 10, arr[1] = 20, ......
        int arr[5] = {0};  // arr[0] = 0, arr[1] = 0,... 五个元素均为0
        int arr[5] = {};   // arr[0] = 0, arr[1] = 0,... 五个元素均为0
        int arr[5] = {1,2};  // arr[0] = 1, arr[1] = 2, arr[2] = 0,除了前两个有值,后面均为0
        int arr[] = {1,2,3,4,5}; //不定义元素个数,默认为后面花括号中元素的实际个数
        使用memset初始化
        int arr[5];
        memset(arr, 0, sizeof(arr)); // sizeof 获取arr数组的大小,这里是将5个元素都设为0,这里memset常用语结构体
        // 以下是接收键盘输入的7个学生的成绩,计算总成绩和平均分
        #include <stdio.h>
        int main(void)
        {
            float arr[7] = {0};
            float sum = 0;
            for (int i = 0; i < 7; i++) {
                printf("请输入第%d个同学的成绩:", i+1);
                scanf("%f", &arr[i]);
                sum += arr[i];
            }
            float average = sum / 7;
            printf("总成绩 = %g, 平均分 = %g\n", sum, average);
            return 0;
        }

二维数组
    二维数组中的每个元素都是一维数组,也就是说二维数组是由多个长度相同的一维数组构成的
    语法:
    数据类型 数组名[分组个数][每组的元素个数]
    int arr[2][2];  // 由两个长度为2的一维数组构成
    注意:
        二维数组中的每个存储区通过组下标(分组个数) 和 组内下标(一维数组的元素下标) 共同确定
        组下标表示具体的分组,从0开始,依次加一
        组内下标表示一组内的具体某个元素对应的下标,从0开始,依次加一
        arr[1][0]; 表示第二组中第一个元素
    二维数组初始化
        未初始化,如上int arr[2][2]; 每个里面的元素在未初始化时,都是随机数
        初始化方法:
          标准初始化:
          int arr[2][2] = {{10,20},{30,40}}; // arr[0][0] = 10 arr[0][1] = 20 arr[1][0] = 30 arr[1][1] = 40
                      初始化0:
              int arr[2][2] = {};
              int arr[2][2] = {{0}, {0}};
              int arr[2][2] = {{0}};
                      其他初始化:
              int arr[3][3] = {{1,2,3},{1,2},{1}}; // 当给数值不全,不全的元素默认设为0
              // arr[0][0~2] 1,2,3  arr[1][0~2] 1,2,0 arr[2][0~2] 1,0,0
              int arr[3][3] = {1,2,3,4,5,6,7,8,9}; // 如果每个每组没有花括号{}区分,name则按照顺序,每个分组依次读取单个组的元素个数作为本组元素
              // arr[0][0~2] 1,2,3  arr[1][0~2] 4,5,6 arr[2][0~2] 7,8,9
              memset方法:
                  int arr[2][2];
                  memset(arr,0,sizeof(arr)); // sizeof 获取arr数组的大小,这里是将二维数组的每个元素都设为0,这里memset常用语结构体
    例:
        #include <stdio.h>
        #include <string.h>
        int main(void)
        {
            // 定义二维数组
            int arr[4][5] = {{1,2,3,4,5}, {2,3,4,5,6}, {3,4,5,6,7}, {4,5,6,7,8,9}};
            memset(arr, 0, sizeof(arr));
            for (int i = 0; i < 4; i++) {
                for (int j = 0; j <5; j++) {
                    printf("%d ", arr[i][j]);
                }
                printf("\n");
            }
            return 0;
       }    
    
二、C语言-函数
C语言程序,由函数构成,函数是C代码的基本单位
  无论C语言程序有多少个函数,一定有且只有一个main函数
函数
    函数:是一堆语句的组合,具有独立性和通用性,可以将指定功能封装进函数里面。
    目的:将重复的操作或者公共的操作,代码只写一次,封装为函数,在需要该操作时,直接调用函数即可,无需再写一遍代码。
    比如五子棋,每次落子后,都要重新绘制棋盘,绘制棋盘的代码就可以封装成函数,当需要绘制棋盘的时候,就直接调用函数即可,不需要重复写绘制棋盘代码。
    语法:
    返回值类型 函数名(参数列表) {
        功能代码语句;
    }
        void 作为返回值和参数列表的话,则表示该函数无返回值,无参数列表。
    参数列表可以有多个,根据功能需求设计即可。
        传入的参数保证需函数功能代码需要的,不要添加无效参数。
        语法如下:
        返回值类型 函数名(参数类型1 参数名1, 参数类型2 参数名2, 参数类型3 参数名3,...)
        注意:
            一维数组作为参数,例如 fun(int *array, int len) 或者 fun(int array[], int len) 或者 fun(int array[5], int len)
            // 当数组作为参数时,一般会多加一个参数,表示数组的长度
            二维数组作为参数,例如fun(int arr[][10], int len) 二维数组的列数即第二个中括号的数值,必须指定,否则报错,len 作为行数,即第一个中括号的数值
       
                         例:
            // 该函数返回值为int类型,函数名为findmax,参数为 int指针类型(可表示数组 或者 int类型变量的地址) 和 int类型的数组长度,
        // 功能模块代码就是找数组中最大值,找出最大值后返回,返回值类型为int
        // 每当有需要找数组中最大值的功能,都随时可以调用该函数使用
        #include <stdio.h>
        // 函数的参数也成为形参,即形式上的参数,规定了函数需要的参数类型,当调用函数时,传入的参数会赋值给形参
        int findmax(int* arr, int len)
        {
            int max = arr[0];
            for (int i = 1; i < len; i++) {
                if (arr[i] > max) {
                    max = arr[i];
                }
            }
            return max;
        }
        int main(void)
        {
            int arr[5] = {1,5,77,8,9};
            int arr1[6] = {1,4,7,9,22,5};
            // 这里findmax(arr, 5) 传入的是实参,相当于 将 main函数里的arr赋值给findmax函数形参中的arr,5赋值给findmax函数形参中的len
            printf("arr max = %d\n", findmax(arr, 5));
            printf("arr1 max = %d\n", findmax(arr1, 6));
            return 0;
        }
    函数的声明
        代码执行顺序:从main函数开始,到return结束
        代码编译顺序:gcc按照从上到下的顺序,逐行编译的
        当调用函数的语句在函数实现的前面时,编译就会报错,找不到函数,warning: implicit declaration of function
        这时可以先声明一下,函数实现可以放后面实现,相当于先给编译器打个招呼,说我有这个函数,后面会实现,调用的时候别给我报错
        例
          #include <stdio.h>
          //函数声明
          int mul(int, int);
          int main(void) {
              // 函数调用
              printf("3 * 5 = %d\n", add(3,5));
              return 0;
        }
        // 函数实现
        int add(int a, int b) {
             return a * b;
        }

http://www.lryc.cn/news/2378261.html

相关文章:

  • 图片通过滑块小图切换大图放大镜效果显示(Vue3)
  • [SSL]1Panel添加阿里云DNS账户
  • C语言编程中的时间处理
  • 计算机网络 : 网络基础
  • C++跨平台开发:突破不同平台的技术密码
  • 实现 STM32 PWM 输出:原理、配置与应用详解
  • Web 架构之负载均衡会话保持
  • 第一次做逆向
  • 【Linux网络】传输层协议TCP
  • AAAI-2025 | 中科院无人机导航新突破!FELA:基于细粒度对齐的无人机视觉对话导航
  • 排序算法之基础排序:冒泡,选择,插入排序详解
  • Linux常用命令42——tar压缩和解压缩文件
  • 网络协议分析 实验七 FTP、HTTP、DHCP
  • HTML 表格与div深度解析区别及常见误区
  • Linux 系统中设置开机启动脚本
  • linux-进程信号的产生
  • 内容中台重构企业知识管理路径
  • ubuntu22.04卸载vscode
  • AGI大模型(19):下载模型到本地之ModelScope(魔搭社区)
  • 基于Spring Boot+Layui构建企业级电子招投标系统实战指南
  • Kali安装详细图文安装教程(文章内附有镜像文件连接提供下载)
  • 2.4GHz无线芯片核心技术解析与典型应用
  • ai agent(智能体)开发 python高级应用4:什么是代理,如何设置squid代理服务器,让crawl4ai 0.6.3 用上代理,获取到数据平权
  • 技术融资:概念与形式、步骤与案例、挑战与应对、发展趋势
  • Chrome代理IP配置教程常见方式附问题解答
  • 微信小程序 密码框改为text后不可见,需要点击一下
  • LLM笔记(六)线性代数
  • Linux——UDP/TCP协议理论
  • Go语言爬虫系列教程(一) 爬虫基础入门
  • PromptIDE提示词开发工具支持定向优化啦