cprimerplus的电子书 (c primer plus语言电子书)

为什么阅读《C Primer Plus》第六版

准备好好研究下redis源码,但是很久没用c语言写代码了,平时工作主要用java和js。所以准备重新阅读学习下c语言经典书籍:C Primer Plus。更好的阅读redis源码。

读书笔记

C语言的起源

C语言1972年由贝尔实验室的Dennis Ritch和 Ken Thomepson(我的偶像)在开发unix操作系统时候设计的。

C的优点:

1. 强大的控制结构
2. 快速
3. 代码紧凑-程序更小
4. 可移植到其他计算机

C语言的缺点:

1. c语言的指针使用,带来的一些编程错误难以觉察。
2. 容易编写出让人极其费解的代码。

C语言的应用范围:

1. pc应用
2. 计算机游戏
3. 嵌入式系统
4. 操作系统
5. 电影特效
6. 计算机语言

yups: C语言不适合做web应用开发,也不太适合用来写脚本。不适合只是因为开发效率不够高效,但不代表做不了。

C语言概述

一个简单demo

//文件名 demo.c
#include <stdio.h>
int main(void)
{
    int num;
    num = 1;
    printf("I am a simple ");
    printf("computer.\n");
    printf("My favorite number is %d because it is first.\n",num);
    return 0;
}

mac下输入gcc demo.c,会最终编译生成a.out文件,运行./a.out,输出

I am a simple computer.
My favorite number is 1 because it is first.

以上是一个比较典型的C程序了。

  1. #include <stdio.h> 这行代码告诉编译器把stdio.h中的内容包含在当前程序中。stdio.h是C编译器软件包的标准部分,提供键盘输入和屏幕输出的支持。
  2. int main(void) 是C程序的执行入口(int和void是ANSI C的规范)
  3. {}是main函数内部的开始和结束。
  4. int num 声明使用一个名字为num的变量,而且num是整数int类型。
  5. num = 1 赋值表达式语句
  6. printf("I am a simple ") 调用printf函数,效果是会在屏幕中显示I am a simple
  7. printf(“computer.\n”); \n表示换行,光标移至下一行。
  8. printf(“My favorite number is %d because it is first.\n”,num); num值代替%d, %d表示是整数类型。
  9. return 0; return语句

变量命名

和java类似,可以用小写字母、大写字母、数字和下划线来命名,但是第一个字符必须是字母或下划线,不能是数字

提高程序可读性的技巧

1. 有意义的函数名和变量名。
2. 写注释,但是定义好的变量名,可以减少一部分注释,防止啰嗦。
3. 空行分隔概念上的多个部分。

多条声明

int feet, fathoms;等价于

int feet;
int fathoms;

关键字和保留标识符

关键字

说明

auto

声明自动变量

short

声明短整型

int

声明整型

long

声明长整型

float

声明单精度浮点型

double

声明双精度浮点型

char

声明字符型

struct

声明结构体类型

union

声明联合(共用)类型

enum

声明枚举类型

typedef

重命名数据类型

const

声明只读变量

unsigned

声明无符号类型

signed

声明有符号类型

extern

声明外部变量

register

声明寄存器变量

static

声明静态变量

volatile

说明变量在程序执行中可隐含的被改变

void

声明函数无返回值或者无参数,声明无类型指针

if

条件语句

else

条件语句否定分支(与if连用)

switch

用于开关语句

case

开关语句分支

default

开关语句中默认分支

for

循环语句

do

循环语句循环体

while

循环语句的循环条件

continue

结束当前循环,开启下一轮循环

break

跳出当前循环

goto

无条件跳转语句

sizeof

计算数据类型长度

return

子程序返回语句(可以带参数,也可以不带参数)循环条件