46 重难点

点击蓝字
关注我们
DRAGON BOAT FESTIVAL
01 基础部分
  标识符的命名规则
  1.只能由字母、数字、下划线构成
  2.数字不能作为标识符的开头
  3.关键字不能作为标识符
  三目表达式
  表达式1?表达式2:表达式3
  先计算表达式1,
  若表达式1成立,  则选择计算表达式2,并表达式2的值作为整个大表达式的值;
  若表达式1不成立,则选择计算表达式3,并将表达式3的值作为整个大表达式的值
  运算
  相同数据类型的元素进行数学运算得到结果还保持原数据类型。
  不同数据类型的元素进行数学运算,先要统一数据类型,统一的标准是低精度类型转
  一维数组的定义、初始化
  类型符 数组名 [常量表达式]
  类型符是指数组中数组元素的类型;数组名要符合标识符命名规则;
  常量表达式是指数组的长度,其值只能是整数,不可以是变量,而且从1开始计数。
  数组元素的引用
  数组名[下标]
  引用数组元素时,[ ]中的下标为逻辑地址下标,只能为整数,可以为变量,且从0开始计数
  二维数组的定义、初始化
  类型符 数组名 [常量表达式][常量表达式]
  二维数组可以看做是矩阵
  类型符是指数组中数组元素的类型;
  数组名要符合标识符命名规则;
  第一个常量表达式是指数组的行数;
  第二个常量表达式是指数组的列数;常量表达式的值只能是整数,不可以是变量,而且从1开始计数。
  一维数组初始化时可以省略数组长度
  二维数组初始化时可以省略行数,但不能省略列数
  数组元素的引用
  数组名[下标] [下标]
  引用数组元素时,[ ]中的下标为逻辑地址下标,只能为整数,可以为变量,且从0开始计数
  第一个[下标]表示行逻辑地址下标,第二个[下标]表示列逻辑地址下标。
02 专题:
  动态内存分配 (所有高级语言,没有C里深刻)
  传统数组的缺点:
  1.数组长度必须事先指定,而且只能是常整数,不能是变量
  例子
  int a[5];  //必须事先指定,而且只能是常整数
  int len = 5; 
  int a[len];//error
  2.传统形式定义的数组,该数组的内存程序员无法手动释放
  数组一旦定义,系统为数组分配的内存空间就会一直存在,除非数组所在的函数运行终止。
  在一个函数运行期间,系统为该函数中的数组分配的空间会一直存在。
  直到该函数运行完毕时,数组的空间才会被系统自动释放。
  3. 数组的长度一旦定义,数组长度就不能再更改。
  数组的长度不能在函数运行的过程中动态的扩充或缩小
  4. 传统方式定义的数组不能跨函数使用
  A函数定义的数组,只有在A函数运行期间才可以被其他函数使用,
  但A函数运行完毕后,A函数中的数组将无法在被其他函数使用。
  为什么需要动态分配内存?
  很好的解决的了传统数组的4个缺陷
  动态内存分配举例_动态数组的构造 难点
  1. 要使用malloc函数,必须要添加malloc.h头文件
  2. malloc函数只有一个形参,并且形参是整型
  3. malloc函数只能返回第一个字节的地址,并且这个地址被强制类型转化成存放整型变量的地址,传达出指向整型   变量的信息
  使用动态数组的优点:
  1.动态数组长度不需要事先给定;
  2.内存空间可以手动释放;
  3.在程序运行中,动态内存空间大小可以通过realloc函数手动扩充或缩小
  静态内存和动态内存的比较
  静态内存是由系统自动分配,有系统自动释放
  静态内存是在栈分配的
  动态内存是由程序员手动分配,手动释放
  动态内存是在堆分配的
  跨函数使用内存的问题 难点
  目的:跨函数使用内存
  函数内的静态空间,不能被其他函数调用访问
  内存越界:程序访问了一个不该被访问的内存
  函数内的静态空间,不能被其他函数调用访问
  函数中的内存空间,随函数终止而被释放。
  内存空间释放后的内容不属于其他函数,其他函数无权限访问。
  但释放后的内存空间的地址是可以被其他函数读取的。
  指针变量可以存贮任何函数中静态内存空间的地址,p都能存垃圾,p想存谁存谁
  静态空间是在栈里面分配的,函数终止本质叫做出栈,所以静态空间随着函数终止而释放,动态空间是在堆里面分配   的,与栈无关,与函数终止无关,不随着函数终止而释放。
  可以用free()释放
  什么是枚举
  把一个事物所以可能的取值一一列举出来
  枚举的优缺点
  优点:代码更安全,比较直观
  缺点:书写麻烦
  约翰•冯•诺依曼(JohnVonNouma,1903-1957),美藉匈牙利人
  计算机之父:2大贡献
  二进制 
  计算机设备分类:运算器 控制器 存储器 输入设备 输出设备
  什么是进制
  数字是本质,进制只是不同表现方式
  一个十六进制位,要用4个二进制数表示,(1)16 = (0001)2 前面补齐
  二进制 逢 二进一
  十进制  逢 十进一  dec
  八进制  逢 八进一   oct 0数字 int i = 05;
  十六进制  逢 十六进一 hex 0x数字  0X数字 
            int i = 0x5;int i = 0X5;
  生活中:
  七进制  七天进周  
  十二进制  十二月进年
  二十四进制  二十四小时进日
  六十进制 六十分钟进小时
  六十秒钟进分钟
  汇编里
  1101B 二进制
  1357O 八进制
  2049D 十进制
  3FB9H 十六进制
  十进制(D) 二进制(B) 八进制(O) 十六进制(H)
  0 0 0 0
  1 1 1 1
  2 10 2 2
  3 11 3 3
  4 100 4 4
  5 101 5 5
  6 110 6 6
  7 111 7 7
  8 1000 10 8
  9 1001 11 9
  10 1010 12 a (A)
  11 1011 13 b (B)
  12 1100 14 c (C)
  13 1101 15 d (D)
  14 1110 16 e (E)
  15 1111 17 f (F)
  16 10000 20 10
  017 = 7 + 1*8  = 15
  0x17 = 7 + 1*16 = 25
  1234 =  4 + 1*10三次方 + 2*10二次方 + 3*10一次方 
  0x32c = c + 3*16二次方 + 2*16一次方 = 4354
  最高幂数是位数-1
  原码:也叫符号绝对值 
  最高位0表示正 1表示负,其余二进制位是该数字的绝对值的二进制位
  在计算机中,从未被使用!
  反码
  反码运行不便,也没有在计算机中应用
  移码
  表示数值平移n位,n称为移码量
  移码主要用于浮点数的阶码的存储
  补码 地址是内存单元编号 0到4G-1 2的32次方-1   总线32位,32个0,1
  主要解决整数的存储 int 4字节 32位个0,1
  已知十进制求二进制
  求正整数的二进制
  除2取余,直到商为零,余数倒序排列
  求负整数的二进制   
  先求出与该负数相对应的正整数的二进制代码,然后,将所有位取反,末尾加1,不够位数时,左边补一
   -5 5 101 010 011   29个1,011
    4字节 int(-3) 011 100 101 补29个1,101
    2字节 short int(-3) 101 补13个1 101
    (-100) 16进制 64(16进制)  0110,0100  反 1001,1011 +1 1001,1100  FFFFFF9C 8位     
   求零的二进制
   全是零
   已知二进制求十进制 
   如果首位是0,则表明是正整数,
   按普通方法来求
   如果首位是1,则表明是负整数,
   将所有位取反,末尾加1,所得数字就是该负数的绝对值
   如果全是零,则对应的十进制数字就是零
   在在VC++6.0中一个int类型变量所能存储的数字的范围是多少
   32位系统,32个0,1组合表示的内存单元,8个十六进制数组合
   int类型变量所能存储的最大正数用十六进制表示:7FFFFFFF
   int类型变量所能存储的绝对值最大负整数用十六进制表示:80000000
   最小负数的二进制代码是多少 1(0-0 31个0)
   最大正数的二进制代码是多少 0(1-1 31个1)
   已知一个整数的二进制代码求原始的数字 按“已知二进制求十进制”求
   不同数据类型转化 丢失最高位.只截取2个数据类型中,所占字节小的位数的值
    链表
    C语言和数据结构的连接 链表是数据结构第一部分
03 算法:
    通俗定义:解题的方法和步骤
    狭义定义:对存储数据的操作
    对不同的存储结构,要完成某一个功能所执行的操作是不一样的。
    比如:
    要输出数组中所有的元素的操作 和
    要输出链表中所有的元素的操作 是不一样的
    这说明:
    算法是依附于存储结构的
    不同的存储结构,所执行的算法是不一样的
    广义定义:广义的算法也叫泛型 C++
    无论数据是如何存储的,对该数据的操作都是一样的
    分层思想,站在更高的层次看,把内部的实现给屏蔽
    数组和链表都是线性的,都是输出一个元素后,再输出下一个元素
    数组
    优点:存取速度快
    缺点:需要一整块连续的空间,插入和删除元素效率很低
    链表
    优点:插入删除元素效率高
    缺点:查找某个位置的元素效率低
    链表专业术语:
    首结点:存放第一个有效数据的结点
    尾结点:存放最后一个有效数据的结点,指针域的指针为NULL,尾结点的标志
    头结点:
    头结点的数据类型和首结点的类型是一模一样的
    头结点是首结点前面的那个节点
    头结点并不存在有效数据
    设置头结点的目的是为了方便对链表的操作
    头指针:存放头结点地址的指针变量
    确定一个链表需要一个参数,头指针

球分享

球点赞

球在看
