C primer plus 读书笔记第九章
本章的标题是函数。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 读书笔记第九章的更多相关文章
- 《C++ Primer》读书笔记 第一章
读<C++ Primer>才知道,自己对C++知之甚少... 写个博客记录下自己C++的成长,只是读书笔记,不是对<C++ Primer>知识点的总结,而是对自己在书上看到的以 ...
- 《C++ Primer Plus 6th》读书笔记 - 第九章 内存模型和名称空间
1. 单独编译 1.1 头文件中常包含的内容: 函数原型 使用#define或const定义的符号常量 结构声明 类声明 模板声明 内联声明 1.2 只需将源代码文件加入到项目中,而不用加入头文件.这 ...
- C primer plus 读书笔记第一章
写在前面: 算法和数据结构是计算机学习的基础,而大部分书籍是用C/C++编写.所以有了把C语言重新学一遍的想法.这个系列主要是记录看C primer plus的一些笔记和部分课后习题的答案,不会总结的 ...
- 《C++ Primer》读书笔记—第二章 变量和基本类型
声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.8比特的char类型计算机表示的实际范围是-12 ...
- 《利用python进行数据分析》读书笔记--第九章 数据聚合与分组运算(一)
http://www.cnblogs.com/batteryhp/p/5046450.html 对数据进行分组并对各组应用一个函数,是数据分析的重要环节.数据准备好之后,通常的任务就是计算分组统计或生 ...
- C primer plus 读书笔记第二章
这章的标题是C语言概述,内容大概是介绍一些简单的示例程序,来了解和熟悉C语言的一些基本特征. 这是书里的第一段代码,敲敲找找感觉.推荐在linux环境下写代码. PS:倒腾sublime text一下 ...
- 《C++ Primer》读书笔记—第一章 开始
声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.一个函数的定义包含四个部分:返回类型(retur ...
- [hadoop读书笔记] 第九章 构建Hadoop集群
P322 运行datanode和tasktracker的典型机器配置(2010年) 处理器:两个四核2-2.5GHz CPU 内存:16-46GN ECC RAM 磁盘存储器:4*1TB SATA 磁 ...
- 《Python基础教程》 读书笔记 第九章 魔法方法、属性和迭代器(上)
构造方法 在Python中创建一个构造方法很容易.只要把init方法的名字从简单的init修改为魔法版本__init__即可: >>> class FooBar: ... d ...
随机推荐
- (转)PHP中extract()函数的妙用
近日在看一个牛人的代码时,看到一个非常好用的函数:extract(),它的主要作用是将数组展开,键名作为变量名,元素值为变量值,可以说为数组的操作提供了另外一个方便的工具,比方说,可以很方便的提取$_ ...
- android 中Log - 简单使用
例如,我们可以使用'Log.d'进行Debug,在java代码中输入Log.d(String tag, String message),tag为自己命名的tag,message为待输出的信息.然后打开 ...
- [转帖]AVS音视频编解码技术了解
AVS高清立体视频编码器 电视技术在经历了从黑白到彩色.从模拟到数字的技术变革之后正在酝酿另一场技术革命,从单纯观看二维场景的平面电视跨越到展现三维场景的立体电视3DTV.3DTV系统的核心问题之一是 ...
- B/S 獲取客戶端Mac地址
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx. ...
- Ajax简单应用-购物车
1. 2. 3. 4. 5. 6.
- Java并发编程之CAS
CAS(Compare and swap)比较和替换是设计并发算法时用到的一种技术.简单来说,比较和替换是使用一个期望值和一个变量的当前值进行比较,如果当前变量的值与我们期望的值相等,就使用一个新值替 ...
- ios 中获得应用程序名称和版本号
IOS程序中的应用名称和版本号在 info.plist 文件中存储着,要想在程序中获得需要使用 NSBundle 对象 下面是示例代码: NSBundle *bundle = [NSBundle ma ...
- 无法嵌入互操作类型“Microsoft.Office.Interop.Word.ApplicationClass”。请改用适用的接口。
引用里找到Microsoft.Office.Interop.Word右键属性 在嵌入互操作类型里,选上False就行了.
- 鼠标划过图片title 提示实现
鼠标划过图片title 提示实现 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...
- c程序代码的内存布局(学好C的基础)
一个程序本质上都是由 BSS 段.data段.text段三个组成的.这样的概念在当前的计算机程序设计中是很重要的一个基本概念,而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配, ...