zoukankan      html  css  js  c++  java
  • 1.2 C语言--函数与数组

    • 函数
      • 函数的定义

        返回值类型函数名(类型形参名[,……]{

        函数体

        }

        • 除了没有访问修饰符外,基本等同于java的函数。
        • 良好的程序设计风格要求即使没有返回值,也要使用return;作为最后一条语句,表示函数结束,但没有返回值。
      • 自动变量
        • 自动变量
          • auto 类型名变量名;
        • 自动变量也称为动态局部变量,随着函数的加载而加载。因此函数中不同的变量能实现重名。
        • 因为自动变量使用最多,因此可以省略。
        • 传给函数形参的是函数实参的一个副本,这就是按值传递,所以实参的值是不能在被调用的函数中修改的。
      • 静态变量
        • 自动变量

          static 类型名变量名;

        • 自动变量在定义时不会被自动初始化,在退出函数时立即释放内存。
        • 静态变量的声明周期是:整个程序运行期间。静态全局变量可以被整个程序访问,静态局部变量只能被方法访问。
      • 外部变量
        • 外部变量

          extern 类型名变量名;

        • 在所有函数之外定义。作用域是从定义点到本文件的末尾。
      • 寄存器变量
        • 寄存器变量

          register 类型名变量名;

        • 就是把经常访问的数据放到CPU的寄存器中。通常不用的,程序也会自动优化。
      • 函数原型
        • 因为C语言本质上是从头到尾执行的。函数的定义如果在调用的前面,是无法的使用的。如果函数的定义在调用之后,就必须使用函数原型在预编译时进行声明。告知编译器。
        • 怎么做

          在文件头部,添加如下命令:

          返回值类型函数名(参数列表);

    • 函数的设计原则
      • 基本设计原则
        • 函数行数不能超过50行。
        • 行数功能单一,高内聚
        • 函数只能有一个入口,一个出口。尽量少的使用全局变量
        • 函数的入口处应该对参数的有效性进行检查
        • 不能认为一个函数总是成功的,要考虑到调用失败的情况
        • 使用return;无论有无返回值
        • 在执行敏感操作时:比如除法,开方等要进行操作数和类型检查,防止出现除零,数据溢出,类型转换等问题。
        • 某个功能重复超过三遍就应该写成函数。
      • 模块化的程序设计
        • 要高内聚,低耦合
        • 自定而下,逐步求精
          • 自定而下
            • 先写出结构简单,层次清晰的主程序来表达整个问题
          • 逐步求精
            • 对子问题进行高级语言的实现
      • 程序注释
        • 不写做什么,而写想做什么,如何做。
        • 基本的功能,作者,开发日期,版本号要加
        • 入口参数和出口参数要详细的说明
    • 数组
      • 一元数组
        • 数组的定义与初始化
          • 数组:具有相同类型变量的集合
          • int score[5]; // int表示数组的基本类型;5这个下标表示维度;C语言中的下标都是从0开始的。
          • 为了方式数组长度的不断该表,通常我们会将数组长度定义为常量或者宏

            #define SIZE 5

            int score[SIZE];

          • 数组的初始化

            int score[]={1,2,3,4}; // 定义了一个长度为4的数组,并初始化。

            int score[4]; // 定义了一个长度为4的数组,并将数组的各个值初始为0.

          • 数组的访问
            • 数组访问越界:在C中没有OutOfBoundary的错误,越界访问会导致正常的程序也出现问题。
        • 二维数组的定义与初始化
          • 定义与初始化

            int score[3][4]; // 定义了一个三行,四列的数组,且数组中所有的元素初始化为0.

            int score[][3]={1,2,3,4,5} // 定义了一个2行3列的数组。且第二行没有数据的地方被初始化为零。

            数组的第二维长度的声明永远不能改变。因为C中的数组是连续的空间按行分配的。数组实际上只是代表第一个元素的地址值。

        • 向函数传递数组
          • 向函数传递数组实际上就是传递的数组的地址值(并且传送的是首地址)。按值传递,传递副本的话会耗费很大的资源,按地址传递提高效率。

             

  • 相关阅读:
    2020牛客暑期多校训练营(第五场)D 思维|最长上升子序列
    codeforces-1343E(贪心+BFS)
    2020牛客暑期多校训练营(第三场)C 计算几何
    codeforces-1385E(拓扑排序)
    2020牛客寒假算法基础训练营2
    2020牛客寒假算法基础训练营1
    codeforces-1295D(欧拉函数)
    codeforces-1283D(多源BFS)
    深入理解JVM之JVM内存区域与内存分配
    属性动画详解一(Property Animation)
  • 原文地址:https://www.cnblogs.com/yanghuabin/p/9761068.html
Copyright © 2011-2022 走看看