zoukankan      html  css  js  c++  java
  • 《写给大家的看的C语言书》笔记

    最近为了学习C语言,看了一本C的入门书,即《写给大家的看的C语言书》。

    这本书非常通俗易懂,全书32章,每章都很短,个人觉得很适合初学者。

    下面是摘抄的一些笔记,供自己以后复习用。

    ============================= chapter03 =============================
    printf不同数据类型时的格式符:
        %c      打印字符
        %s      打印字符串
        %d      打印数字(整数)
        %.2f    打印小数(.2表示打印2位小数)   
    =====================================================================

    ============================= chapter04 =============================
    代码中的注释应尽量口语化,且有别于代码。
    比如:(a<b)?a:b /* get the smaller of the 2 values */
    =====================================================================

    ============================= chapter05 =============================
    1. C语言中字符串末尾是“null零”,“null零”是ASCII码的第一个,
        不是数字0,也不是字符‘0’
    2. 字符串的长度不包括末尾的“null零”
    3. 定义字符串时要在末尾预留一个“null零”的空间(就是一个字节)
    4. 定义字符串的时候同时进行初始化操作的话,可以不必指定字符数组的长度,
        编译器会自动计算长度,同时在最后加个“null零”
        比如: char str[] = "abcdef"
    =====================================================================

    ============================= chapter09 =============================
    每次赋值运算本身也会产生一个值
    比如: i=9 这个表达式本身本身也为9,
        所以可以进行多重赋值, j=k=l=i=9 或 a=3*(b=2)
    =====================================================================

    ============================= chapter10 =============================
    进行比较运算时,比较表达式本身的值有两种:
        比如(9==8)的值为0,即为假
        比如(9==9)的值为1,即为真
    =====================================================================

    ============================= chapter13 =============================
    字符串长度和字符串大小是不同的概念:
    字符串长度:不包括字符串末尾的null零,通过strlen()来获取
    字符串大小:存储字符串所占字符数,包括null零,通过sizeof()获取
    =====================================================================

    ============================= chapter16 =============================
    如果要在printf中输出%,需要2个%%
    比如 printf("%%"); 会输出 %
    =====================================================================

    ============================= chapter17 =============================
    switch 语句可用exit(1)退出
    switch 变量用整型或字符型变量,不要用float和double
    =====================================================================

    ============================= chapter18 =============================
    读取一个字符用 getchar(), 它是带缓冲的输入,直至输入Enter键,才实际写
    入变量
    getch()是不带缓冲的输入,但是在fedora16下有点问题。???
    =====================================================================

    ============================= chapter19 =============================
    gets()函数可以代替scanf()来接受字符串的输入
    gets()函数会自动将Enter转化为null零,然后将输入的字符串保存在指定变量中
    gets()函数还有个比scanf()优势的地方是,gets()函数可以接受带空格的字符串
          scanf()函数遇到空格时相当于输入已经结束
    puts()函数会在输出的字符串末尾自动追加一个 '\n'
    =====================================================================

    ============================= chapter20 =============================
    产生随机数用 rand()函数 (可以产生 0 ~ 32767 内的任意整数)
    rand()产生的随机数每次都一样,
    如果要产生真正的随机数,需要每次给与不同的种子,用 srand()函数产生种子。
    比如: srand(time); rand();
    用当前时间作为srand()的参数,可以保证每次的种子是真正的随机
    =====================================================================

    ============================= chapter21 =============================
    定义字符串时,要在末尾预留一个null零 '\0', 否则打印时可能会有问题
    比如: char a[3] = { 'a', 'b', 'c' }; 是个字符数组,但不是字符串
           char a[4] = { 'a', 'b', 'c', '\0' }; 是字符串
           char a[3] = "abc"; printf("%s", a); 可能会出现预期以外的字符
           char a[4] = "abc"; char a[] = "abc";都能正常显示
    =====================================================================

    ============================= chapter24 =============================
    * 不是指针变量的一部分
    定义时: * 表示变量是个指针变量。
            比如: int *ptr; 变量名是ptr
    取值时: * 表示取出指针变量中存放的地址所指向的值。
            比如:printf(" %d", *ptr); 表示打印ptr所指向的值
    =====================================================================

    ============================= chapter25 =============================
    数组名虽然是一个指针,但是它不能被改变,所以相当于一个指针常量。
    即 数组名不能出现在赋值运算的左边。
    字符指针赋值有一点需要注意:不要让程序存储比字符指针指向的第一个字符串
    更长的字符串。
    比如: char *pname = "harry poter"; gets(pname);
        第二句gets() 存在风险,当输入的长度比"harry poter" 长的时候
        有可能会覆盖其他数据。
    =====================================================================

    ============================= chapter26 =============================
    malloc() 函数用于分配堆内存。
        malloc() 默认返回字符型指针,所以如果分配char型以外的堆内存,需要转型
        比如:分配10个int型大小的堆内存空间,
              int *ptr;
              ptr = (int *)malloc( 10 * sizeof(int));
    free() 函数用于释放已经分配的堆内存
    =====================================================================

    ============================= chapter27 =============================
    结构体的定义必须在定义结构体变量之前
    =====================================================================

    ============================= chapter28 =============================
    打开文件的方法:
        FILE *fptr;
        fptr = fopen(filepath, "r/w/a");
        fclose(fptr);
    fprintf()函数可用于写入文件,
    与printf()函数不同之处在于多了一个文件指针的参数。
    fgets()函数和gets()不同之处在于要给出输入的长度。
    还有以下2点要注意:
    1. 用于读取文件
    2. 遇到'\n'或者到达给出的长度时结束输入
    feof(fptr)用于判断文件是否读完
    =====================================================================

    ============================= chapter30 =============================
    fseek()可以改变文件指针的位置,使得可以局部修改文件。
    用"r+/w+/a+"模式打开的文件可以随机访问。
    =====================================================================

  • 相关阅读:
    FFmpeg笔记-基本使用
    记一次下载大文件存在数据异常问题排查
    从零开始编写IntelliJ IDEA插件
    Guava LoadingCache不能缓存null值
    FFmpeg笔记--vcodec和-c:v,-acodec和-c:a的区别?
    说说maven依赖冲突,依赖调解,依赖传递和依赖范围
    记一次NoHttpResponseException问题排查
    JVM源码分析-类加载场景实例分析
    JVM源码分析-JVM源码编译与调试
    理解PHP的变量,值与引用的关系
  • 原文地址:https://www.cnblogs.com/wang_yb/p/2598688.html
Copyright © 2011-2022 走看看