第七章 C控制语句:分支和跳转

  1. if else 用法

    if (expression) //expression为真时,运行花括号内语句
    {
    statement1
    }
    else //不为真时,运行else的花括号内语句
    {
    statement2
    }
  2. ctype.h系列的字符函数

    #include <stdio.h>
    #include <ctype.h> //包含isalpha()的函数原型
    int main ()
    {
    char ch; while ((ch = getchar()) != '\n')
    {
    if (isalpha (ch)) //检测输入输入字符是否为字母
    putchar(ch + 1);
    else
    putchar (ch);
    }
    putchar (ch); getchar();
    getchar(); return 0;
    }

    运行程序,输入 Hello! 输出的就是 Ifmmp!

    ctype.h头文件中字符测试函数

函数名 如果是下列参数时,返回值为真
isalnum 字母数字(字母或数字)
isalpha 字母
isblank 标准的空白字符(空格、水平制表符或换行符)或任何其他本地化指定为空白的字符
iscntrl 控制字符,如Ctrl+B
isdigit 数字
isgraph 除空格外的任意可打印字符
islower 小写字母
isprint 可打印字符
ispunct 标点符号(除空格或字母数字字符外的任何可打印字符)
isspace 空白字符(空格、换行符、换页符、回车符、垂直制表符、水平制表符或其他本地化定义的字符)
isupper 大写字母
isxdigit 十六进制字符
  1. 逻辑运算符

    3种逻辑运算符

逻辑运算符 含义
&&
||
!
  1. 条件运算符:?:

    x = (y< 0) ? -y : y;

    如果y<0,则x = -y,否则x = y、

第八章 字符输入/输出和输入验证

  1. getchar()putchar()都是单字符I/O
    #include <stdio.h>
    
    int main()
    {
    char ch; while ((ch = getchar()) != '#')
    putchar(ch); getchar(); return 0;
    }

输入Hello,I'm # here,程序读取到#就停止,后面的内容就不能读取。

getchar();的地方设置断点并验证

  1. 输入验证(防止使用者输错),提前做好预防

第九章 函数

  1. 简单函数
    #include <stdio.h>
    
    #define NAME "GIGATHING, INC"
    #define ADDRESS "101 Megabuck Plaza"
    #define PLACE "Megapolis, CA 94904"
    #define WIDTH 40 void starbar(void); int main()
    {
    starbar();
    printf("%s\n", NAME);
    printf("%s\n", ADDRESS);
    printf("%s\n", PLACE);
    starbar(); getchar(); return 0;
    } void starbar(void) //第一个void 表示函数为void类型,没有返回值;第二个void表示函数不带参数(形参)
    {
    int count; //count为该函数内的局部变量,即可以在starbar函数外的地方再次定义同名变量 for (count = 1; count <= WIDTH; count++)
    putchar('*');
    putchar('\n');
    }

输出结果:

starbar标识符出现三次,三个作用:函数原型告诉编译器函数的类型,函数调用表示在此处执行函数,函数定义定义了函数内语句的功能

  1. 函数递归

    #include <stdio.h>
    
    void up_and_down(int);
    
    int main(void)
    {
    up_and_down(1); getchar(); return 0;
    } void up_and_down(int n)
    {
    printf("Level %d: n location %p\n", n, &n); // #1
    if (n < 4) up_and_down(n + 1);
    printf("LEVEL %d: n location %p\n", n, &n); // #2
    }

输出结果:

注:每次函数调用的n值都是不同的,且每次调用之后都会返回,执行后面的语句

大概就是这样子

第十章 数组和指针

  1. sizeof计算元素个数
    #include <stdio.h>
    
    int main(void)
    {
    const int days[] = { 31,28,31,30,31,30,30,31,30,31,30,31 };
    int index; for (index = 0; index < sizeof days / sizeof days[0]; ++index)
    printf("Month %d has %d days.\n", index + 1, days[index]); getchar(); return 0;
    }

注:sizeof days是在计算整个数组的大小,sizeof day[0]是在计算一个int元素的大小

  1. 指针与数组(一维)

    #include <stdio.h>
    #define MONTH 12 int main(void)
    {
    const int days[MONTH] = { 31,28,31,30,31,30,30,31,30,31,30,31 };
    int index; for (index = 0; index < MONTH; ++index)
    printf("Month %2d has %d days.\n", index + 1, *(days + index)); getchar(); return 0;
    }

*(days + index)相当于days[index]

  1. const的其他内容

    const int days[MONTH] = { 31,28,31,30,31,30,30,31,30,31,30,31 };

    起到保护数组内容的作用,更改days数组内的值会发生编译错误

    int days[MONTH] = { 31,28,31,30,31,30,30,31,30,31,30,31 };
    const int *ptr = days;

    这样的话就可以更改days数组的内容,但是ptr指针就是固定指向days数组

  2. 指针和多维数组

    #include <stdio.h>
    
    int main()
    { int a[4][2] = { {2,4},{6,8},{1,3},{5,7} }; int (*ptr)[2] = a; //括号是必须的! int i, v;
    for (i = 0; i < 4; ++i)
    {
    for (v = 0; v < 2; ++v)
    {
    printf("%d\t", *(*(ptr + i) + v));
    }
    putchar('\n');
    } getchar(); return 0;
    }

输出结果:

注:C语言中二维数组长这样:

不出意外的话,这应该是我对这本书的最后的笔记了,后面好多都是的看不懂的理论,也就没办法做出来笔记......

感兴趣的朋友可以自行买书回来看一下呀

《C Primer Plus》第六版笔记--7~10章的更多相关文章

  1. C++ Primer Plus 第六版笔记

    C++ Primer Plus 第六版笔记 关于对象声明的思考 转自:http://www.cnblogs.com/weiqubo/archive/2009/11/02/1930042.html C+ ...

  2. 《C Primer Plus》第六版笔记--4~6章

    目录 第四章 字符串和格式化输入/输出 第五章 运算符.表达式和语句 第六章 C控制语句:循环 虽然匆匆忙忙,但还是要做笔记,虽然大概都知道...... 挑一些容易忘记的地方 第四章 字符串和格式化输 ...

  3. 《C Primer Plus》第六版笔记--1~3章

    目录 第一章 初识C语言 1 使用C语言的7个步骤 1.1 定义程序目标 1.2 设计程序(功能实现) 1.3 编写代码 1.4 编译 1.5 运行程序 1.6 测试和调试程序 1.7 维护和修改代码 ...

  4. <NET CLR via c# 第4版>笔记 第10章 属性

    10.1 无参属性 10.1.1 自动实现的属性 10.1.2 合理定义属性 属性可以只读或只写,而字段访问总是可读和可写的(一个例外是 readonly 字段仅在构造器中可写). 属性方法可能抛出异 ...

  5. c++ primer plus 第6版 部分三 9章 - 章

    c++ primer plus 第6版                                               部分三 9章 - 章 第9章   内存模型和名称空间 1.单独编译 ...

  6. 《C++Primer》第五版习题答案--第一章【学习笔记】

    C++Primer第五版习题解答---第一章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2022/1/7 第一章:开始 练习1.3 #includ ...

  7. 《C++Primer》第五版习题答案--第二章【学习笔记】

    C++Primer第五版习题解答---第二章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/9 第二章:变量和基本类型 练习2.1: 类 ...

  8. c++ primer plus 第6版 部分二 5- 8章

    ---恢复内容开始--- c++ primer plus 第6版 部分二    5-  章 第五章 计算机除了存储外 还可以对数据进行分析.合并.重组.抽取.修改.推断.合成.以及其他操作 1.for ...

  9. c++ primer plus 第6版 部分一 1-4章

    c++ primer plus 第6版 源代码 ---编译器---目标代码---连接程序(启动代码--库代码)---可执行代码 源代码扩展名:c   cc   cxx     C    cpp     ...

随机推荐

  1. 安卓xml布局中 android:paddingBottom="@dimen/activity_vertical_margin"是什么意思?

    @dimen/activity_vertical_margin 是什么意思? @dimen/activity_vertical_margin这个的意思就是在你的values文件夹下面的dimens文件 ...

  2. Spring Boot-@Conditional注解以及衍生注解@ConditionalOnBean

    @Conditional:判断@Conditional指定的条件是否成立,如果成立才会给容器中添加组件,配置类里面的内容才会生效 我们发现有很多的自动配置类,但是这些自动配置类都有指定的条件,必须满足 ...

  3. Linux内核链表之共享双链表

    说明 共享双链表意义在于,可以用一套函数维护不同数据类型的双链表 准备 定义双链表 #include <iostream> #include <string> using na ...

  4. 硬核 | Redis 布隆(Bloom Filter)过滤器原理与实战

    在Redis 缓存击穿(失效).缓存穿透.缓存雪崩怎么解决?中我们说到可以使用布隆过滤器避免「缓存穿透」. 码哥,布隆过滤器还能在哪些场景使用呀? 比如我们使用「码哥跳动」开发的「明日头条」APP 看 ...

  5. 踩了个DNS解析的坑,但我还是没想通

    hello大家好,我是小楼. 最近踩了个DNS解析的小坑,虽然问题解决了,但排查过程比较曲折,最后还是有一点没有想通,整个过程分享给大家. 背景 最近负责的服务要置换机器.置换机器可能很多小伙伴不知道 ...

  6. 今天写了一个可以测试并发数和运行次数的压力测试代码。(Java)

    今天写了一个可以测试并发数和运行次数的压力测试代码 介绍一下为什么会写这么一个工具. 介绍一个这个工具怎么用的. 背景 最近在开发CoapServer端,以及模拟设备侧发送数据调用开发好的CoapSe ...

  7. react实战系列 —— 起步(mockjs、第一个模块、docusaurus)

    其他章节请看: react实战 系列 起步 本篇我们首先引入 mockjs ,然后进入 spug 系统,接着模仿"任务计划"模块实现一个类似的一级导航页面("My任务计划 ...

  8. CoAP调试工具Mozi.IoT.CoAP应用详解

    前言 CoAP是一种类HTTP协议的物联网专用协议,其数据包为人类不可阅读的字节流形式,在开发相关应用的时候往往不能准确的了解数据包的内容.故需要专用的调试工具对数据和通讯进行调试.这篇文章是为了让开 ...

  9. 面试突击41:notify是随机唤醒吗?

    做 Java 开发的小伙伴,对 wait 方法和 notify 方法应该都比较熟悉,这两个方法在线程通讯中使用的频率非常高,但对于 notify 方法的唤醒顺序,有很多小伙伴的理解都是错误的,有很多人 ...

  10. C#中检查null的语法糖

    今天看到已经更新了devblogs,新增的C# 11的!!(用于检查null的语法)经过非常长的讨论,最后取消了.然后我又想起来null检查,这个可以说一说. 函数参数null检查 传统写法 写一个函 ...