zoukankan      html  css  js  c++  java
  • 2019年2月3日训练日记(函数学习小结)

    今天写一下函数部分的知识点(函数学习小结)

    函数

    简单介绍一下函数的基础知识:
    引入函数之前先介绍一下子程序
    子程序本质是一个相对独立的程序段,用一个标识符代替。子程序的使用不仅缩短了程序,节省了内存空间及减少了程序的编译时间,而且有利于结构化程序设计。
    接下来我来介绍函数:
    函数定义的语法形式:
    数据类型 函数名(形式参数表)
    {
    函数体 //执行语句
    }
    函数的数据类型是函数的返回值类型,函数名是标识符,形式参数可以是空的(即无参函数),也可以有多个形参,用逗号隔开即可。但是无论有无形参,圆括号不可省略。形参必须标注类型,可以是变量名、数组名、指针名,作用是实现主调函数与被调函数的关系。
    值得注意的是函数不允许嵌套,嵌套函数视为非法。
    函数的形式:
    函数的形式从结构上分为三种:无参函数,有参函数,空函数。
    无参函数即没有参数传递的函数,一般不需要带回函数值,此时函数类型说明为void,有参函数则一般需要带回函数值,而空函数整体只有一对花括号,花括号内没有任何语句的函数,例如:
    函数名()
    { }
    空函数不完成任何工作,只占据一个位置。作用是在大型程序设计中用于扩充函数功能。
    函数的声明与调用:
    调用函数之前要先声明函数原型,其格式如下:
    类型说明符 被调函数名(含类型说明的形参表)
    与函数定义的第一行类似,只是多了一个分号,成为了一个声明语句。
    函数调用可以作为一条语句 ,这时函数可以没有返回值,同时函数调用也可以出现在表达式中,这时就必须有一个明确的返回值。返回语句的一般表达形式为:return(表达式);当一个函数没有返回值时,函数中可以没有return语句,也可以写为return;这时函数没有返回值,而只把流程转向主调函数。
    在调用函数时需要注意:
    实参列表中应该给出与函数原型形参个数相同、类型相符的实参。在主调函数中的参数称为实参,实参一般应具有确定的值。实参可以是常量、表达式,也可以是已有确定值的变量、数组或指针名。
    函数的传值调用与传址调用:
    传值调用是将实参的数据值传递给形参,即将实参值拷贝一个副本存放到被调用函数的栈区中,但是形参值可以改变,实参并不会随形参改变而改变,因此参数传递方向只是从实参传递到形参,简称为单向值传递。
    而传址调用是将是实参变量的地址值传递给形参,这时形参是指针,即让形参的指针指向实参地址,这样就可以变形参以变实参。
    例如:
    传值调用:

    void swap(int a,int b)
    {
        int tmp = a,a = b,b = tmp;
    }
    int main()
    {
        int c=1,d=2;
        swap(c,d);
        cout<<c<<' '<<d<<endl;
        return 0;
    }
    

    该程序输出1 2

    传址调用:
    该程序虽然在swap函数中交换了a,b两数的值,但是在main函数中没有交换,因为swap只是交换c,d两数的副本的值,实参数没有改变,并没有达到交换的目的。

    void swap(int &a,int &b)
    {
        int tmp = a,a = b,b = tmp;
    }
    int main()
    {
        int c=1,d=2;
        swap(c,d);
        cout<<c<<' '<<d<<endl;
        return 0;
    }
    

    该程序输出2 1
    在次程序中,swap函数的参数为传址调用,&a是指实参变量的地址传给形参,所以,在此函数swap中修改a,b的值相当于在主函数main中修改c,d的值。
    全局变量、局部变量及它们的作用域:
    全局变量又叫外部变量,即定义在函数外的变量,因此局部变量又叫内部变量,是定义在某一函数内部的变量。还有一个在代码块内定义的变量,此变量的存在时间和作用域都被限制在该代码块内部,如for(int i;i<=n;i++){sum+=i}中的i是在for循环中定义的,其存在时间和作用域只能被限制在该for循环语句中。
    另外注意需要全局变量的点:
    过多的使用全局变量,会增加调试难度,因为多个函数都会改变全局变量的值,不易判断某个时刻全局变量的值。
    同时还会降低程序的通用性。如果将一个函数移植到另一个程序中,需要将全局变量一起移植过去,但同时还会出现重名问题。
    全局变量在程序执行过程中一直占用内存单元。
    全局变量在定义时若没有赋初值,其默认值为0。
    局部变量:
    局部变量的储存空间是临时分配的,当函数执行完毕,局部变量的空间就被释放,其中的值无法保留到下次使用。
    在不同的函数中变量名可以相同,他们分别代表不同的对象,在内存中占据不同的内存单元,互不干扰。
    另外局部变量可以屏蔽全局变量。
    局部变量没有赋值时,值是随机的,记得要初始化初值。
    局部变量受栈空间大小限制,大数组需要注意。即局部变量的数组不能开的很大,全局变量随便。

  • 相关阅读:
    225. 用队列实现栈
    415. 字符串相加
    rabbitmq的基本使用
    3. 无重复字符的最长子串
    面试题59
    面试题30. 包含min函数的栈
    面试题09. 用两个栈实现队列
    287. 寻找重复数
    1137. 第 N 个泰波那契数
    70. 爬楼梯
  • 原文地址:https://www.cnblogs.com/study-hard-forever/p/12130067.html
Copyright © 2011-2022 走看看