zoukankan      html  css  js  c++  java
  • 『C程序设计』读书笔记系列文章之第七章 函数

    1. 关于形参和实参的说明

    ① 在函数被调用之前,形参不占内存
    ② 实参可以是常量、变量或表达式
    ③ 必须指定形参的类型
    ④ 实参与形参类型应一致
    ⑤ 实参对形参的数据传递是"值传递",即单向传递

    2. 函数返回值

    如果想让函数返回一个值,在函数中就要用return语句来获得,在定义函数时也要对函数值指定类型,如果不指定,默认返回整型。

    3. 函数调用

    1)注意在函数调用时实参和形参的个数、类型应一一对应。对实参表求值的顺序是不确定的,有的系统按自左至右,有的系统则按自右至左的顺序。这一点要注意。
    2)函数调用的方式:函数语句,函数表达式,函数参数
    3)如果主调函数和被调函数在同一文件中,并且主调函数在前,那么一般要在主调函数中对被调函数进行说明。除非:(1)被调函数的返回值类型为整型或字符型(2)被调函数出现在主调函数之前。
    4)对函数的说明和定义是不同的,定义是指对函数功能的确立,包括指定函数名,函数值类型,形参及其类型、函数体等。说明则只是对已定义的函数返回值类型进行说明,只包括函数名、函数类型以及一个空的括弧,不包括形参和函数体。
    5)c语言允许函数的递归调用(在调用一个函数的过程中又出现直接或间接的调用该函数本身)。

    4. 数组作为函数参数

    1)数组元素作为函数参数 和一般变量相同
    2)数组名作参数应该在主调和被调函数分别定义数组,形参数组的大小可以不定义。注意:数组名作参数,不是单向传递。
    3)多维数组作参数,在被调函数中对形参数组定义时可以省略第一维的大小说明,但不能省略第二维或更高维的说明。

    5. 局部变量和全局变量

    从变量作用域角度分,变量可分为局部变量和全局变量。
    1)内部变量(局部变量)
    在一个函数内定义,只在函数范围内有效的变量。
       2)外部变量(全局变量)
    在函数外定义,可以为本文件其它函数所共用,有效范围从定义变量的位置开始
         到本文件结束。建议尽量少使用全局变量,因为它在程序全部执行过程中都占用
         资源,而且使函数的通用性降低了。如果在定义外部变量之前的函数要想使用该
         外部变量,则应在该函数中用extern作外部变量说明。

    6. 动态存储变量与静态存储变量

    从变量值存在的时间(生存期)角度来分,可分为静态存储变量和动态存储变量。静态存储指在程序运行期间给变量分配固定的存储空间,动态存储指程序运行期间根据需要动态的给变量分配存储空间。
    C语言中,变量的存储方法分为两大类:静态存储类和动态存储类,具体包括:自动的(auto),静态的(static),寄存器的(register),外部的(extern)。
    1) 局部变量的存储方式
    函数中的局部变量如不作专门说明,都之auto的,即动态存储的,auto可以省略。局部变量也可以定义为static的,这时它在函数内值是不变的。静态局部变量如不赋初值,编译时系统自动赋值为0,动态局部变量如不赋初值,则它的值是个不确定的值。C规定,只有在定义全局变量和局部静态变量时才能对数组赋初值。为提高执行效率,c允许将局部变量值放在寄存器中,这种变量叫register变量,要用register说明。但只有局部动态变量和形式参数可以作为register变量,其它不行。
    2) 全局变量的存储方式
    全局变量在函数外部定义,编译时分配在静态存储区,可以在程序中各个函数所引用。多个文件的情况如何引用全局变量呢?假如在一个文件定义全局变量,在别的文件引用,就要在此文件中用extern对全局变量说明,但如果全局变量定义时用static的话,此全局变量就只能在本文件中引用了,而不能被其它文件引用。
    3) 存储类别小结
    从作用域角度分,有局部变量和全局变量
    局部变量:自动变量,即动态局部变量(离开函数,值就消失)
         静态局部变量(离开函数,值仍保留)
     寄存器变量(离开函数,值就消失)
     (形参可定义为自动变量和寄存器变量)
    全局变量:静态全局变量(只限本文件引用)
     全局变量(允许其它文件引用)
    从存在的时间分,有静态存储和动态存储
    动态存储:自动变量(本函数内有效)
     寄存器变量(本函数内有效)
     形参
    静态存储:静态局部变量(函数内有效)
     静态全局变量(本文件内有效)
     全局变量(其它文件可引用)
    从变量值存放的位置分
    静态存储区:静态局部变量
      静态全局变量
    全局变量
    动态存储区:自动变量和形参
    寄存器内:寄存器变量

    7. 内部函数和外部函数

    内部函数:只能被本文件中的其它函数调用,定义时前加static,内部函数又称静态函数。
    外部函数:可以被其它文件调用,定义时前加extern,如果省略,则隐含为外部函数,在需要调用此函数的文件中,一般要用extern说明。
  • 相关阅读:
    [洛谷P2745] [USACO5.3]窗体面积Window Area
    [洛谷P2751] [USACO4.2]工序安排Job Processing
    [洛谷P2738] [USACO4.1]篱笆回路Fence Loops
    [洛谷P4609] [FJOI2016]建筑师
    [洛谷P3228] [HNOI2013]数列
    解决Qt5使用SSL的“qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method”错误
    qt查看是否支持SSL
    qt获取依赖的openssl的版本
    qt关闭ssl验证,解决不能正常使用自签署ssl证书API的问题
    使用OpenSSL创建HTTPS所使用的SSL证书
  • 原文地址:https://www.cnblogs.com/michaelxu/p/1166645.html
Copyright © 2011-2022 走看看