第7章 函数——C++的编程模块

1. 函数的返回类型不能是数组,但可以是其他任何一种类型,甚至可以是结构和对象。有趣的是,C++函数不能直接返回数组,但可以将数组作为结构或对象的组成部分来返回。

2. 在C++中括号为空意味着不指出参数。在ANSI C中,括号为空意味着不指出参数。在C++中,不指定参数列表时应该用省略号。

void say_bye(…);

  1. 3.  数组名数组名解释为其第一个元素的地址有一些例外,首先,对数组名使用sizeof将得到整个数组的长度;其次,将地址运算符用于数组名时,将返回整个数组的地址。

4. 在C++中,当且仅当int *arr和int arr[]用于函数头或函数原型中,它们的含义才是相同的,它们都意味着arr是一个int指针。

5. 用const保护数组:为防止函数无意中修改数组的内容,可在声明形参时使用关键字const, void show_array(const double ar[], int n);

C++将声明const double ar[]解释为const double *ar。

6. 如果数据类型本身并不是指针,则可以将const数据或非const数据的地址赋给指向const的指针,但只能将非const数据的地址赋给非const指针。

7. 尽可能使用const,将指针参数声明为指向常量数据的指针有两条理由:首先,可以避免由于无意间修改数据而导致的编程错误;其次,使用const使得函数能够处理const和非const实参,否则将只能接受非const数据。

8. int age = 39;

const int *pt = &age;

pt的声明并不意味着它指向的值就是一个常量,而只是意味着对pt而言,这个值是个产量。换句话说,可以直接通过age变量来修改age的值,但不能使用pt指针来修改它。

9. int data[3][4];

int total = sum(data, 3);

data是一个数组名,数组名是数组第一个元素的地址,该数组有3个元素,每个元素本身是一个数组,由4个int值组成,因此data的类型是指向由4个int组成的数组的指针。

int sum(int (*ar2)[4], int size);

int sum(int ar2[][4], int size);

sum的代码在声明参数ar2时,没有使用const,因为这种技术只能用于指向基本类型的指针,而ar2是指向指针的指针。

10. 函数的地址为存储其机器语言代码的内存的开始地址。

11. auto自动类型推断只能用于单值初始化,而不能用于初始化列表。P245

12. 使用typedef简化复杂的声明。P248

C++ primer plus读书笔记——第7章 函数——C++的编程模块的更多相关文章

  1. C++ primer plus读书笔记——第8章 函数探幽

    第8章 函数探幽 1. 对于内联函数,编译器将使用相应的函数代码替换函数调用,程序无需跳到一个位置执行代码,再调回来.因此,内联函数的运行速度比常规函数稍快,但代价是需要占用更多内存. 2. 要使用内 ...

  2. C primer plus 读书笔记第十一章

    本章标题是字符串和字符串函数.主要是了解和字符串有关的函数. 1.字符串表示和字符串I/O 主要内容:字符串常量和字符串数组的初始化,对比了指针和字符串. 其中要注意的是,数组初始化是从静态存储区把一 ...

  3. C primer plus 读书笔记第六章和第七章

    这两章的标题是C控制语句:循环以及C控制语句:分支和跳转.之所以一起讲,是因为这两章内容都是讲控制语句. 第六章的第一段示例代码 /* summing.c --对用户输入的整数求和 */ #inclu ...

  4. C primer plus 读书笔记第五章

    本章的标题是运算符,表达式和语句.主要研究如何处理数据. 示例代码展示了一个使用简单的while循环的代码,难度不大. 下面简单介绍本章的基本概念. 1.基本运算符. 基本运算符有:赋值运算符(C语言 ...

  5. C primer plus 读书笔记第四章

    本章的标题是字符串的格式化输入/输出,重点介绍输入和输出. 本章的第一段示例代码和上一张示例代码很相近,代码就不贴了,新出现的特性是使用了一个数组来存放字符串,C预处理命令和strlen()函数. 下 ...

  6. C primer plus 读书笔记第三章

    本章的标题是数据和C,主要内容是介绍数据类型中的整数类型和浮点数类型. 本章的第一段代码 #include <stdio.h> int main(void) { float weight; ...

  7. C++ primer plus读书笔记——第17章 输入、输出和文件

    第17章 输入.输出和文件 1. 对键盘进行输入缓冲可以让用户在将输入传输给程序之前返回并更正.C++程序通常在用户按下回车键时刷新输入缓冲区. 2. 一些I/O类 streambuf类为缓冲区提供了 ...

  8. C++ primer plus读书笔记——第16章 string类和标准模板库

    第16章 string类和标准模板库 1. string容易被忽略的构造函数: string(size_type n, char c)长度为n,每个字母都为c string(const string ...

  9. C++ primer plus读书笔记——第15章 友元、异常和其他

    第15章 友元.异常和其他 1. 友元类的所有方法都可以访问原有类的私有成员和保护成员.另外,也可以做更严格的限制,只将特定的成员函数指定为另一个类的友元.哪些函数.成员函数.或类为友元是由类定义的, ...

随机推荐

  1. Hznu_oj 2340 你敢一个人过桥吗?

    Description 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过. ...

  2. canvas绘制图像轮廓效果

    在2d图形可视化开发中,经常要绘制对象的选中效果. 一般来说,表达对象选中可以使用边框,轮廓或者发光的效果.  发光的效果,可以使用canvas的阴影功能,比较容易实现,此处不在赘述. 绘制边框 绘制 ...

  3. k8s多集群配置管理平台

    k8s多集群配置管理平台 临时集群特性 模拟生产环境 整体环境说明 内网:10.17.1.44 [root@localhost account-server]# kubectl get nodes N ...

  4. Cloudreve 自建云盘实践,我说了没人能限得了我的容量和速度!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 为啥要用自建网盘,市面上的云盘不香了? 每一个用户需求的背后都是因为有场景存在,而这 ...

  5. oo第二单元——多线程魔鬼电梯

    在初步认识了面向对象思想后,立刻进入了多线程的学习,本单元的难点主要是锁的理解,需要保证线程安全的同时防止死锁的发生,也要尽可能缩小锁的范围,提高性能.这一单元以电梯为载体,让我们从生活出发,从电梯运 ...

  6. (十)struts2的异常处理机制

    成熟的MVC框架应该提供成熟的异常处理机制.当然可以在方法中手动捕捉异常,当捕捉到特定异常时,返回特定逻辑视图名. 这种方式非常繁琐,需要在方法中写大量try catch块,最大的缺点还是一旦需要改变 ...

  7. 通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解

    首先感谢张队@geffzhang公众号转发了上一篇文章,希望广大.neter多多推广dapr,让云原生更快更好的在.net这片土地上落地生根. 目录:一.通过Dapr实现一个简单的基于.net的微服务 ...

  8. mp4视频中插入文字

    最近接到一个需求,需要往mp4中动态插入文字,并且mp4中的乌云能在文字上有飘动的效果,一开始想用canvas,但是由于本人经验不足,没什么思路,看到css3有一个属性:mix-blend-mode, ...

  9. leetcode 刷题(数组篇)26题 删除有序数组中的重复值 (双指针)

    题目描述 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额 ...

  10. ISODateTimeFormat 转换2019-08-15T00:36:49.366456463Z 日期格式

    import java.text.*; import java.text.SimpleDateFormat; import java.util.*; import org.joda.time.Date ...