• 《C Primer Plus 第五版》读书笔记


    CH1-2:概述

    链接器:链接库代码、启动代码(start-up code)

    CH3-5:数据、字符串、运算符

    1 数据类型存储方式:整数类型、浮点数类型

    2 浮点数存储:小数部分+指数部分

    3 int:

        3.1 %#o,%#x,%#X 分别是前缀0,0x,0X

        3.2  (32位系统,括号中为64位)       

    JMVU[E4I59`D9~S)RM`%PHI

    4 char:转义字符 

    `]1179Y_CA[`PVA{B55G[$S

    5 字符串 string.h

    6 printf()作用:断行;换行。 printf()有返回值,正确返回打印字符数,错误打印负数。

    7 sizeof 与 sizeof()

    8 const

    9 参数传递

    10 scanf():注意 将字符串读入数组不加取地址符&。返回值为成功读入项目个数,没读到返回0,检测文件结尾返回EOF

      *用法: printf("%*.*f", width, precision, value);设置宽度和精度

                     scanf("%d %d %d",&n);//跳过前两个整数,把第三个数读给n

    其他用法:

    while(scanf("%d",&num)==1)

                          continue;//作为占位符,使程序更可读

                         作用:跳过特定输入,如整数。

    CH6-9:循环、分支跳转、字符输入输出、函数

    1 continue和break

    2 单字符

    getchar() 流中放入字符

      while((ch = getchar())!=‘ ’)防止换行符影响

    putchar() 流中取出字符

    CH10:数组和指针

    1 数组赋值:[ ]指定特定元素

    int arry[6] = {[5]=220};


    2 数组与指针

    array == &array[0];

    array +2 == &array[2];

    *(array + 2)== array[2];

    * array + 2 == array[0] + 2;


    3 数组与函数

    int sum(int *array, int n);

    int sum(int * , int );


    int sum(int array[ ], int n);

    int sum(int [ ], int);

    4 指针

    *指针必须初始化


    5 const

    int * const ptr = ...; 指针不会指向别处 ptr是指针

    const int * ptr = ...; 指向的数据不会改变 *ptr是数据

    const int * const ptr = ...; 指针和指向的数据都不会改变


    6 指针和多维数组array[2][2]

    array = &array[0][0] 数组首地址,第一行首地址

    array + 1 == &array[0][1] 第二个元素地址

    array + 2 == &array[1][0] 第三个元素地址

    *(array + 1) == &array[1][0] 第二行的首地址

    *(array + 1) + 1 == &array[1][1] 第二行第二个元素地址

    *(*(array + 1) + 1) == array[1][1] 第二行第二个元素数据


    7 数组指针(数组的指针)与指针数组(指针的数组)

    数组指针:指向一维数组的指针,行指针
    定义 int (*p)[n];//执行p+1时,p要跨过n个整型数据的长度

    指针数组:有n个指针类型的数组

    定义 int *p[n];//这里执行p+1是错误的,这样赋值也是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。

    8 声明N维数组的指针时,只有最左边的方括号可以留空

    int sum(int array[ ][4]);


    9 变长数组VLA

    变长数组必须是auto存储类型

    int row = 5;

    int array[row];//row的声明要早于array


    int sum(int array[row], int row);//错误!row的声明需要早于array

    int sum(int array[ * ], int );//如果省略row名称,array需要用*号代替维数


    10 复合文字(可传递数组常量,普通数组只能传递数组变量)

    声明方法:(int [2]) {10, 20}

                      (int [  ]) {10, 20, 30}

    使用方法:int * ptr; ptr = (int [2]) {10, 20}; //使用指针

                     int sum(int array[ ]);sum( (int [  ]) {10, 20, 30} )

    CH11:字符串和字符串函数

    1 指针数组

    char * ptr[5];

    2 数组指针

    char (*ptr)[5];

    3 gets( )

    从标准输入得到字符串,以换行符 标记输入结束。

    返回 前所有字符+,丢弃 等待下一次调用。

    4 fgets( ) 如果读到 就一并保存到字符串

    ptr = fgets(name, MAX, stdin);从stdin读入最大MAX个字符给name。

    5 puts( ) 自动添加换行符

    6 fputs( ) 不自动添加换行符

    fputs(name, stdout);

    7 字符串函数

    strlen( )

    strcat( ) 字符串添加到另一个字符串尾

    strncat( ) 限制添加的字符数

    strcmp( )

    strncmp( ) 比较前几个字符

    strcpy( )

    strncpy( )

    sprintf( ) 格式化输入到字符串

        sprintf(formal, "%s, %-19s: $%6.2f ",last, first, prize);

    查找字符

    ptr = strchr(line, ' ');//返回line中第一个 的地址

    ptr = strrchr(line, ' ');//返回line中最后一个 的地址

    查找子串

    ptr = strstr(line, subline);//返回line中第一个subline子串的地址

    8 字符串转换为数字

    atoi( );

    atof( );

    atol( );

    strtol( );

    strtoul( );

    strtod( );

    CH12:存储类、链接和内存管理

    存储类:自动、寄存器、外部链接静态、内部链接静态

                    auto    register     extern        static

    作用域:代码块、文件

    链接类型:内部、外部、空

  • 相关阅读:
    【luogu P1343 地震逃生】 题解
    【luogu P3931 SAC E#1
    【luogu P3275 [SCOI2011]糖果】 题解
    【luogu P2947 [USACO09MAR]向右看齐Look Up】 题解
    【luogu P1456 Monkey King】 题解
    【luogu P3377 左偏树(可并堆)】 模板
    【luogu P1993 小K的农场】 题解
    Sqlmap注入Base64编码的注入点
    kali高速更新源以及主题修改方法
    DiscuzX3.1搬家全过程
  • 原文地址:https://www.cnblogs.com/lucas-hsueh/p/3714406.html
Copyright © 2020-2023  润新知