首页 > 其他分享 >第六章 函数

第六章 函数

时间:2022-10-27 20:57:07浏览次数:64  
标签:函数 形参 对象 引用 第六章 实参 指针

6.1函数基础

调用函数:函数的调用将完成两项工作,一是实参初始化函数对应的形参;二是控制权从从主调函数转移到被调函数,主调函数的执行被中断,被调函数开始执行。当函数遇到return语句时,也要完成两项工作,一是返回return语句中的值(如有);二是控制权从被调函数转移到主调函数,被调函数被停止,主调函数继续往下执行。

 

对象作用域和声明周期:对象的名字有作用域也就是可见性,表示某个对象的名字在某个块内可见(可用);对象本身有生命周期,表示对象从被创建到被销毁的过程。

局部对象按定义方式有自动对象和局部静态对象之分,自动对象指函数控制路径通过对象的定义语句时,对象被自动创建,到达对象所在的块尾时,对象被自动销毁,这样的对象就是自动对象,如形参;而局部静态对象,当函数控制路径通过其定义语句时被创建和初始化,且仅能被初始化一次,一直到程序终止时才会被销毁。

 

函数的声明:函数的三要素是 函数返回类型,函数名,形参类型。函数名字需在调用前声明。

                    可在头文件.h中声明函数,在源文件.cpp中定义函数(源文件和需要使用函数的文件都需要导入该头文件)

 

6.2 函数的参数传递

函数被调用时,将用传入的实参来初始化形参,该过程同变量的初始化过程。

如果形参是非引用类型时,形参是实参的拷贝,形参和实参是两个相互独立的对象,可以说实参被值传递,或者说函数被传值调用

如果形参是引用类型时,形参将与传入的实参绑定,此时,形参是实参的别名,它们指代的是同一个对象;函数内对形参的操作也将作用于实参,可以说实参被引用传递,或者说函数被传引用调用

 

“理解顶层const ”--顶层const作用于对象本身,即对象本身是常量,不可更改。、

 

形参类型:

①传值形参,当形参是非引用类型的变量时,形参是实参的拷贝,函数内对形参的操作不会影响实参。

                   且实参的顶层const也将被忽略,即无论实参是否为const 对象,传入时都只是将其副本拷贝给形参,其const属性会被忽略。

 

②指针形参;当形参是指针类型变量时,其本质和传值形参一样,都是对实参的拷贝,实参与形参互相独立,唯一不同点是指针存储的是地址值,指针形参拷贝的是实参的地址值,由于指针的这一特点,能让实参与指针形参指向同一个对象;函数内对指针解引用的操作即对实参所指对象的操作。但函数内对指针形参本身的操作仅改变指针形参本身的地址值或者说仅改变指针形参的指向,不影响实参指针(传入的指针)。

 

③引用形参:引用形参将绑定初始化它的实参,函数内对引用的操作实际上是作用在引用所引的对象上。

“使用引用形参,避免拷贝”--对于拷贝效率低或者遇到不允许拷贝的情况下,使用引用形参将大大提到效率。如不需要修改引用形参所引对象,可以将引用设置为常量引用类型。

“使用引用形参可以隐式返回多个参数”---函数只能返回一个对象,如需返回多个信息,可以将部分对象通过引用传递传入函数内,这样函数内对引用形参的修改也将被带出函数。

 

重要概念:“const形参与实参”!!!

①当形参是传值形参类型时,实参初始化形参时会忽略调顶层const,即实参的副本(右值)拷贝给形参时,实参的const属性会被过滤带掉。

②形参为指针类型或者引用类型时:

         因const对象不能被改变,所以只能被常指针指向、常引用所引,换言之,普通的指针只能指向非const对象、普通的引用只能引用非const对象。

         而非const对象是可修改的变量,所以无论是普通的指针还是常指针都能指向它,无论是普通引用还是常引用都能引用它;只不过常指针指向它时或者常引用引用它时,只能读不能修改它。

反过来说:常指针可以指向常量对象也可以指向非常量对象。 普通的指针只能指向非常量对象。

                 常引用可以引用常量对象也可以引用非常量对象。普通引用只能引用非常量对象。

 

标签:函数,形参,对象,引用,第六章,实参,指针
From: https://www.cnblogs.com/newlyx/p/16833547.html

相关文章

  • 【JS】函数的prototype属性
     函数中的prototype属性        1.函数中prototype属性的值是一个对象或null,默认只有一个constructor属性指向函数本身。        2.......
  • react Hooks 钩子函数
    什么是Hooks?首先:React的组件创建方式,一种是类组件,一种是纯函数组件。React团队认为组件的最佳写法应该是函数,而不是类。但是纯函数组件有着类组件不具备的特点:纯函数......
  • (七)Linux系统其他函数
    1文件属性操作函数判断文件是否存在及权限intaccess(constchar*pathname,intmode);access.c/*#include<unistd.h>intaccess(constchar*pathname......
  • 常用字符串函数的应用
    常用字符串函数包括:gets()  puts()  strlen()  strcat()   strcmp()   strcpy()​程序代码#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#......
  • JavaScript函数进阶
    JavaScript中函数是第一类对象。函数与对象共存,函数也可以被视为其他人一类型的JavaScript对象。函数能被变量引用、能以字面量形式声名,甚至可以作为函数参数进行传递。Java......
  • 力扣(leetcode) 88. 合并两个有序数组(双指针法)(库函数法)
    题目分析:这道题给的题目挺恶心的。就是将两个有序数组合并成一个有序数组。但是他给的数组是这样的:nums1=[1,2,3,0,0,0]这里实际上就是:nums1=[1,2,3]。后面的0只起......
  • js函数式编程讲解
    什么是函数式编程是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简......
  • unity 给动画帧添加触发事件并调用函数
    动画事件的作用:假设你要在动画的某一帧执行某个函数方法做一些判断,比如当人物攻击动画武器挥砍出去的一帧执行攻击函数 添加动画帧事件方法①点击需要店家动画事件的......
  • 数据库 ,函数-外键约束
    函数   案例1由于业务需求变更,企业员工的工号,统一为5位数,目前不足五位数的全部在前边补0,比如1号员工的应该是00001Updateempset工号=lpad(工号,5,‘0’);案例2......
  • mysqloffset函数
    mysql中的limit用法有哪些(推荐)[offset,]1.m代表从m+1条记录行开始检索,n代表取出n条数据。(m可设为0)如:SELECT表示:从第7条记录行开始算,取出5条数据2.值得注意的是,n可以被设......