p182~p185:

函数
1、在调用函数和执行return语句的同时,也发生了控制权的转移。

2、函数返回值不能是一个数组。(但是可以返回一个包含数组的对象,或者指向数组的指针)

3、重要概念:名字的作用域和对象的生命周期。

4、对象的生命周期分两种情况:一种是对象定义在函数体外部(包括main函数1),则对象将存在于程序的整个执行过程,第二种是对象定义在函数体内部,被称为自动变量(包括形参和普通局部变量),在块的末尾将被自动销毁。

5、局部静态对象的生命周期是程序的整个执行过程。

6、局部静态变量的默认初始化结果不是未定义的!!!并且,即使程序执行的路径将多次经过初始化语句,局部静态变量也只会被初始化一次(仅第一次)。

7、函数原型=函数声明≈函数签名。

6.1
实参是形参的初始值,形参是函数内部执行时要用到的变量。

6.2
a - 返回类型不匹配
b - 正确
c - 花括号漏了一边。。。
d - 正确

6.3

#include <iostream>
int fact(int val)
{
if (val == )
return ;
return val * fact(val - );
}
int main()
{
std::cout << fact() << std::endl; //
return ;
}

6.4

#include <iostream>
using namespace std;
int fact(int val)
{
if (val == )
return ;
return val * fact(val - );
}
int getFact()
{
cout << "Enter a number:" << endl;
int x;
cin >> x;
return fact(x);
}
int main()
{
cout << getFact() << endl;
return ;
}

6.5

int abs(int x)
{
if (x < )
return -x;
return x;
}

6.6
形参和局部变量多属于自动对象,生命周期仅限于所在块的范围。
局部静态变量将存在于程序的整个执行过程。

#include <iostream>
using namespace std;
int test(int x)
{
cout << "==========" << endl;
int i; // 默认初始化是未定义的!
i += x;
cout << "parameter val x=" << x << endl;
cout << "local var i=" << i << endl;
static int k; // 默认初始化为0!!!
++k;
cout << "local static var k=" << k << endl;
}
int main()
{
for (int i = ; i < ; ++i) {
test(i);
}
return ;
}

调用结果:

==========
parameter val x=0
local var i=6422476
local static var k=1
==========
parameter val x=1
local var i=6422477
local static var k=2
==========
parameter val x=2
local var i=6422479
local static var k=3
==========
parameter val x=3
local var i=6422482
local static var k=4

6.7

int test()
{
static int k;
return k++;
}

【c++ primer, 5e】【函数基础】的更多相关文章

  1. C++ primer ch6 函数基础-1

    1.形参和实参:编译器并没有规定实参的求值顺序. 类似下面的代码,其行为是未定义的: ; printf("%d %d\n",++i,++i); 2.变量的初始化: 如果内置类型的变 ...

  2. 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数

    [源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...

  3. JavaScript 函数基础

    1. JavaScript 函数基础 1. 定义方法 2. 函数的调用方法 3. 函数方法 apply : 将函数作为数组的方法来调用 将参数以数组形式传递给该方法 call   : 将函数作为对象的 ...

  4. Python 函数基础、有序集合、文件操作(三)

    一.set 特点: set是一个无序且不重复的元素集合访问速度快:天生解决元素重复问题 方法: 初始化 >>> s1 = set()>>> print(type(s ...

  5. 【2017-03-05】函数基础、函数四种结构、ref和out参数、递归

    一.函数基础 1.函数/方法:非常抽象独立完成某项功能的一个个体 2.函数的作用: 提高代码的重用性提高功能开发的效率提高程序代码的可维护性 3.分类 固定功能函数高度抽象函数 4.函数四要素:输入, ...

  6. PHP基础入门(三)---PHP函数基础

    PHP基础入门(三)---函数 今天来给大家分享一下PHP的函数基础.有了前两章的了解,想必大家对PHP有了一定的基础了解.想回顾前两章的朋友可以点击"PHP基础入门(一)"&qu ...

  7. PHP基础入门(二)【PHP函数基础】

    PHP基础入门(二)--函数基础 了解 PHP基础入门详解(一) 后,给大家分享一下PHP的函数基础. 这部分主要讲的就是: 函数的声明与使用.PHP中变量的作用域.静态变量.函数的参数传递.变量函数 ...

  8. 09-Python入门学习-函数基础与参数

    一.函数基础 1.定义函数的三种形式 1.1 无参函数 def foo(): print('from foo') foo() 1.2 有参函数 def bar(x,y): print(x,y) bar ...

  9. Python学习day9 函数Ⅰ(基础)

    函数Ⅰ(基础) 三目运算 基本结构 v =  前面  if 条件 else 后面    #条件为真v=前面,条件为假v=后面.​#等同于if 条件: v = '前面'else:    v = '后面' ...

  10. Python学习笔记-函数基础

    函数基础 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 为什么使用函数:减少重复代码.使程序变的可扩展使程序变得易维护 1.定义一个函数 #定 ...

随机推荐

  1. std::unique_lock

    /*与Mutex RAII相关,方便线程上锁,相比std::lock_guard提供了更好的上锁解锁控制,反正我是没看出来也是在构造时上锁,在析构时解锁,感觉和lock_gurad大差不差都是在线程函 ...

  2. PMP 质量管理新7张图

    亲和图.关联图.系统图.矩阵图.网络图.pdpc.矩阵数据分析法

  3. Struts2使用struts标签判断变量是否为空的写法

    <%@taglib uri="/struts-tags" prefix="s"%> <span id="viewOrgName&qu ...

  4. PL/SQL Developer使用技巧、快捷键(转载)

    1.类SQL PLUS窗口:File->New->Command Window,这个类似于oracle的客户端工具sql plus,但比它好用多了. 2.设置关键字自动大写:Tools-& ...

  5. js apply()、call() 使用参考

    引入,求一个数组的最大值,有这么一种快捷方法:Math.max.apply(null,arr); 但是最初看 JavaScript高级程序设计 的时候,没看懂,原文(斜体表示)如下: 每个函数都包含两 ...

  6. [VS2015].NET4.0环境下使用.NET2.0程序集,使用sqlite时报异常 出现“混合模式程序集异常”

    在.net 4.0环境下使用sqlite时报异常 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集其调用的方法是从sqli ...

  7. _init_() got an unexpected keyword argument ‘shape’

    按照<TensorFlow:实战Google深度学习框架>一书学习的tensorflow,书中使用的是0.9.0版本,而我安装的是1.11.0 如果按照书上的例子来,因为这本书使用tens ...

  8. #include <sys/epoll.h> epoll - I/O event notification facility 服务器端 epoll(7) - Linux manual page http://www.man7.org/linux/man-pages/man7/epoll.7.html

    epoll使用详解(精髓) - Boblim - 博客园 https://www.cnblogs.com/fnlingnzb-learner/p/5835573.html epoll使用详解(精髓) ...

  9. Windows中压缩版的MySQL的安装、配置

    本次笔记是根据mysql-8.0.13-winx64版本编写: 1.将下载的压缩包解压到自己想放的目录 2.右键计算机 -> 属性 -> 高级系统设置 -> 环境变量 -> 系 ...

  10. 都说新的Arraylist 扩容是(1.5倍+1) 看了1.8的源代码发现不是这么回事

    都说新的Arraylist 扩容是(1.5倍+1) 看了1.8的源代码发现不是这么回事 就用下面这段代码在jdk的三个版本运行看了下效果 import java.lang.reflect.Field; ...