本章的标题是函数。C的设计原则是把函数作为程序的构成模块。

1.函数概述

  函数的定义:函数是用于完成特定任务的程序代码的自包含单元。

  使用函数的原因:1.函数的使用可以省去重复代码的编写。2.使得程序模块化,更有利于阅读、修改和完善。以这种方式看待函数有利于把精力投入到程序整体设计而不是实现其细节。

  函数同变量一样有多种类型。任何程序在使用函数之前都需要声明该函数类型。

  函数参数、函数类型没啥说的,其他语言都会讲到。

  PS:函数的结尾最好只使用一次return,这样更有利于阅读程序的人明白函数的执行流程。

2.递归

  递归一般可以代替循环语句使用。有些情况下使用循环语句比较好,有时候使用递归更有效。递归方法虽然使程序结构优美,但其执行效率却没有循环语句高。一般情况下,选择循环更好一点。首先,因为每次递归调用都有自己的变量集合,所以需要比较多的内存; 第二,每次函数调用需要花费一定的时间,所以执行速度慢。但是在某些情况下,我们不能用简单的循环语句代替递归,所以有必要学习递归。

#include "stdio.h"
void up_and_down (int);

int main (void) {
    up_and_down ();
    ;
}

void up_and_down (int n)
{
    printf ("Level %d: n location %p\n", n, &n);
    )
        up_and_down (n+);
    printf ("Level %d: n location %p\n", n, &n);
}

这个程序是典型的递归,运行结果如下,关键是理解堆栈的原理。

3.多源代码文件程序的编译

  一般可以把多个函数放到同一个文件,还可以使用头文件,把函数原型都放到一个头文件中。

4.地址运算符

  一元运算符&可以取得变量的存储地址。%p是输出地址的说明符。

  下面引入指针的概念。指针是一个其数值为地址的变量。间接运算符*能够得到指针指向的变量的数值。声明指针时候,需要指针所指向的变量的类型,例如

int * pi;

  pi的值是一个地址,在大多数系统中,pi的值是一个地址,在大多数系统中,它是由一个无符号整数表示,但是这并不表示可以把指针看作整数类型,因为指针是一种新的数据类型。

  如何理解变量名,地址和数值:一个变量一般有两个属性:变量名和数值。程序被编译和加载后,同一个变量在计算机中的两个属性是地址和数值。变量的地址可以被看作是在计算机中的变量名。在很多编程语言中,变量地址只由计算机处理,对于编程人员完全不可见,但在在C语言中,可以使用运算符&来对变量地址进行操作。

  编程练习比较简单,难度不超过书中的代码示例。

to be continued。。。

  

C primer plus 读书笔记第九章的更多相关文章

  1. 《C++ Primer》读书笔记 第一章

    读<C++ Primer>才知道,自己对C++知之甚少... 写个博客记录下自己C++的成长,只是读书笔记,不是对<C++ Primer>知识点的总结,而是对自己在书上看到的以 ...

  2. 《C++ Primer Plus 6th》读书笔记 - 第九章 内存模型和名称空间

    1. 单独编译 1.1 头文件中常包含的内容: 函数原型 使用#define或const定义的符号常量 结构声明 类声明 模板声明 内联声明 1.2 只需将源代码文件加入到项目中,而不用加入头文件.这 ...

  3. C primer plus 读书笔记第一章

    写在前面: 算法和数据结构是计算机学习的基础,而大部分书籍是用C/C++编写.所以有了把C语言重新学一遍的想法.这个系列主要是记录看C primer plus的一些笔记和部分课后习题的答案,不会总结的 ...

  4. 《C++ Primer》读书笔记—第二章 变量和基本类型

    声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.8比特的char类型计算机表示的实际范围是-12 ...

  5. 《利用python进行数据分析》读书笔记--第九章 数据聚合与分组运算(一)

    http://www.cnblogs.com/batteryhp/p/5046450.html 对数据进行分组并对各组应用一个函数,是数据分析的重要环节.数据准备好之后,通常的任务就是计算分组统计或生 ...

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

    这章的标题是C语言概述,内容大概是介绍一些简单的示例程序,来了解和熟悉C语言的一些基本特征. 这是书里的第一段代码,敲敲找找感觉.推荐在linux环境下写代码. PS:倒腾sublime text一下 ...

  7. 《C++ Primer》读书笔记—第一章 开始

    声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.一个函数的定义包含四个部分:返回类型(retur ...

  8. [hadoop读书笔记] 第九章 构建Hadoop集群

    P322 运行datanode和tasktracker的典型机器配置(2010年) 处理器:两个四核2-2.5GHz CPU 内存:16-46GN ECC RAM 磁盘存储器:4*1TB SATA 磁 ...

  9. 《Python基础教程》 读书笔记 第九章 魔法方法、属性和迭代器(上)

    构造方法 在Python中创建一个构造方法很容易.只要把init方法的名字从简单的init修改为魔法版本__init__即可: >>> class FooBar: ...     d ...

随机推荐

  1. Dedecms当前位置{dede:field name='position'/}修改

    这个实在list_article.htm模板出现的,而这个模板通过loadtemplage等等一系列操作是调用的include 下的arc.archives.class.php $this->F ...

  2. <address>标签,为网页加入地址信息

    一般网页中会有一些网站的联系地址信息需要在网页中展示出来,这些联系地址信息如公司的地址就可以<address>标签.也可以定义一个地址(比如电子邮件地址).签名或者文档的作者身份. 语法: ...

  3. 《InsideUE4》UObject(三)类型系统设定和结构

    垃圾分类,从我做起! 引言 上篇我们谈到了为何设计一个Object系统要从类型系统开始做起,并探讨了C#的实现,以及C++中各种方案的对比,最后得到的结论是UE采用UHT的方式搜集并生成反射所需代码. ...

  4. cal命令详解与练习

    cal: 显示日历. 命令格式: cal [-smjy13] [[[day] month] year] 参数说明 -1 显示当前月日历 -3 显示当前月前后3月的日历 -s 以星期天为第一天显示 -m ...

  5. @font-face扒站的步骤

    今天模仿百度首页手机版的时候遇到的@font-face的问题,现在整理一下. 问题:图中红色区域,在拷贝F12样式的时候,并没有出现这些小图标.        图1:百度的效果             ...

  6. JS定义对象方法?

    第一种:构造函数形式  把参数作为构造函数的参数传递,这样对于对象的初始化更灵活一点 <script language="javascript"><!-- /** ...

  7. 折半插入排序(Binary Insertion Sort)的C语言实现

    原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia   折半插入排序(Binary Insertion Sort)的基本思想是将新记录插入到已经 ...

  8. 01:Hello, World!

    描述 对于大部分编程语言来说,编写一个能够输出“Hello, World!”的程序往往是最基本.最简单的.因此,这个程序常常作为一个初学者接触一门新的编程语言所写的第一个程序,也经常用来测试开发.编译 ...

  9. JS 对象、HTML事件处理、JS 类型转换、Date

    1. JS 对象 <script> var Person = new Object(); Person.id = 1; Person.name = "Hello World&qu ...

  10. 通过ctypes获得python windows process的内存使用情况

    通过ctypes 类库中的win32方法GetProcessMemoryInfo()获得当前进程的内存使用情况.该函数可以在32或者64位,python2.6+及python3.x之上都能有用. &q ...