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. js 跨域 之 修改服务器配置-XAMPP-Apache (nginx 拉到最后!)

    js高程第21章提到了ajax 跨域技术,方法有很多,如图: 我主要讲这个: 其实代码就是这样就好了,当然只兼容 IE9 及之后的版本 ,IE9 之前的版本请去原书看吧,Page 600 var xh ...

  2. 配置Hibernate的流程

    配置项目的前提下你应该配置好你的开发环境 1新建hibernate.cfg.xml文件,放在src目录里 <?xml version="1.0" encoding=" ...

  3. netstat -tulpn

    [root@d java]# netstat -tulpnActive Internet connections (only servers)Proto Recv-Q Send-Q Local Add ...

  4. Buffer Data

    waylau/netty-4-user-guide: Chinese translation of Netty 4.x User Guide. 中文翻译<Netty 4.x 用户指南> h ...

  5. End-to-End Speech Recognition in English and Mandarin

    w语音识别.噪音.方言,算法迭代. https://arxiv.org/abs/1512.02595 We show that an end-to-end deep learning approach ...

  6. 微信公众号获取用户openId How to use cURL to get jSON data and decode the data?

    w http://stackoverflow.com/questions/16700960/how-to-use-curl-to-get-json-data-and-decode-the-data

  7. python open-falcon docker.WEB developers---flask,---django.

    http://www.verydemo.com/demo_c281_i2477.html (python Gevent – 高性能的Python并发框架) http://www.django-rest ...

  8. d3.js 之SVG:矢量化图形绘制

    SVG Scalable Vector Graphics 是一个成熟的W3C标准,被设计用来在web和移动平台 上展示可交互的图形.和HTML类似,SVG也支持CSS和JavaScript.尽管可以使 ...

  9. python类可以任意添加属性

    python类可以任意添加属性 class A(object): def __init__(self): self.name = "zhangsan" self.age = 18 ...

  10. Linux vim编辑器常用命令

    Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器 常用的vim命令如下图 补充: num+命令 对命令执行num次,如  5dd:剪切一行 * 5  即剪切5行,其它如此 /text   ...