• 读书笔记之C Primer Plus 3


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

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


    第4章 字符串和格式化输入/输出

    前导程序

    // talkback.c -- 演示与用户交互
    #include 
    #include       // 提供strlen()函数的原型
    #define DENSITY 62.4     // 人体密度(单位:磅/立方英尺)
    int main()
    {
         float weight, volume;
         int size, letters;
         char name[40];        // name是一个可容纳40个字符的数组
    
         printf("Hi! What's your first name?\n");
         scanf("%s", name);
         printf("%s, what's your weight in pounds?\n", name);
         scanf("%f", &weight);
         size = sizeof(name);
         letters = strlen(name);
         volume = weight / DENSITY;
         printf("Well, %s, your volume is %2.2f cubic feet.\n",
                   name, volume);
         printf("Also, your first name has %d letters,\n",
                   letters);
         printf("and we have %d bytes to store it.\n", size);
    
         return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    运行输出

    Hi! What's your first name?
    Christine
    Christine, what's your weight in pounds?
    154
    Well, Christine, your volume is 2.47 cubic feet.
    Also, your first name has 9 letters,
    and we have 40 bytes to store it.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 采用数组array存储字符串, char name[40]该数组占用内存中40个连续的字节,每一个字节存储一个字符值。
    • %s处理字符串的输入和输出。 注意:&weight有&,name没有。
    • C预处理器把字符常量DENSITY定义为62.4。
    • strlen()获取字符串的长度。需要#include

    字符串简介

    字符串是一个或多个字符的序列: “Helo World!!”

    c语言用char类型的数组保存字符串,通过字符\0标记字符串的结束。
    所以40个存储单元,实际只能存储39个字符大小。

    所以"x"和’x’的区别: "x"实际上由两个字符组成:'x’和\0

    char name[40];
    name = “Serendipity”
    strlen -> 11, 空字符不计入
    sizeof -> 40

    常量和C预处理器

    3.14159 * d , pi * d
    变量名比数字表达的信息更多
    多处使用,改动也方便。

    支持 float pi;
    pi = 3.14159;
    但是变量容易被误改,通过C预处理器:
    #define pi 3.14159
    编译程序时候,所有pi都会替换成3.14159
    注意末尾不加分号。

    C90标准新增了const关键字,限定变量为只读。
    const int MONTHS = 12; //MONTHS不可更改,值为12

    printf()和scanf()

    scanf函数每次读取一个字符,跳过所有的空白字符,
    直至遇到第一个非空白字符,如果是%s,会直到遇到下一个空白结束。

    scanf(“%d,%d”,&n,&m);
    用户将输入一个数字、一个逗号、再输入一个数字。

    printf和scanf第一个参数中的转换说明必须与后续参数中的值相匹配。
    可以使用转换说明控制输出的外观:字段宽度、小数位和字段内的布局。

    第5章 字符串和格式化输入/输出

    和java一样的就不记了。

    sizeof和size_t

    sizeof运算符以字节为单位返回运算对象的大小,
    size_t是语言定义的标准类型,
    C的typedef机制
    typedef double real;
    real就是double的别名。
    可以声明real deal;

    ++运算符

    a_post = a++; //使用a值之后,递增a
    pre_b = ++b; //使用b值之前,递增b
    
    • 1
    • 2

    不要自作聪明,一次用太多运算符,自己都会糊涂。

    表达式和语句

    legs = 4 表达式
    legs = 4; 一条语句
    最简单的语句是空语句:
    ; //空语句

    类型转换

    1. 升级转换,两种类型的运算,两个值被分别转换成两种类型的更高级别。
    2. 类型的级别高到低:long double、double、float、unsigned long long 、long long 、unsigned long 、long、unsigned int、int。
    3. 赋值表达式语句中,计算的结果会被转换成被赋值变量的类型。
    4. 当作为函数参数传递时,char和short被转换成int,float转换成dobule
    5. 浮点值转换成整数类型,原来的浮点值会被截断。

    强制类型转换运算符

    mice = 1.6 + 1.7;
    mice = (int)1.6 + (int)1.7;
    
    • 1
    • 2
  • 相关阅读:
    2022CCPC预选赛C Guess(博弈)
    车牌识别C#项目源代码
    泰安ITSS认证流程,认证条件
    SVM算法原理解读
    es6(三)—— set(集合) 和map的使用
    第二章:25+ Python 数据操作教程(第二十一节PIP连接错误:SSL 证书验证失败解决办法)
    Java计算机毕业设计单车商城源码+系统+数据库+lw文档
    图论入门题题解
    L14.linux命令每日一练 -- 第二章 文件和目录操作命令 -- md5sum和chown命令
    工业化生产预测(xgboost)(笔记版)
  • 原文地址:https://blog.csdn.net/yuoveyu/article/details/127852186