专题

专题

  1. 动态内存分配的问题

    1. 传统数组的缺点

      1>数组长度必须事先指定,且只能是长整数,不能是变量

      例子:int a[5];//OK

      int len = 5; int a[len]; // error

      2>传统形式定义的数组,该数组的内存程序员无法手动释放

      在一个函数运行期间,系统为该函数中数组所分配的空间会一直存在,直到该函数运行完毕时,数组的空间才会被系统释放

      3>数组的长度不能在函数运行的过程动态的扩充或者缩小(数组的长度一旦定义,其长度就不能再更改)

      4>A函数定义的数组,在A函数运行期间可以被其他函数使用,但运行完毕之后,A函数中的数组将无法被其他函数使用

      传统定义的数组无法跨函数使用

    2. 为什么需要动态分配内存

      动态数组很好的解决了传统数组的这4个缺陷

      传统数组也叫静态数组

    3. 动态内存分配举例------动态数组的构造

      /*
       2020年6月14日16:56:07
       
      */

      # include <stdio.h>
      # include <malloc.h> // 不能省

      int main(void)
      {
      int i = 5; // 分配了四个字节   静态分配
      int * p = (int *)malloc(4); //12行 int * 表示强制转换为 整形地址
      /*
      1.要使用malloc函数,必须添加malloc.h这个头文件
      2.malloc函数只有一个形参,并且形参是整数
      3.4表示请求系统为本程序分配4个字节
      4.malloc函数只能返回第一个字节的地址
      5.12行分配了8个字节,p变量占4个字节,p指向的内存也占4个字节
      6.p本身所占的内存是静态分配的,p所指向的内存是 动态分配的
       
                                 */
      *p = 5; // *p 代表的就是一个int变量。只不过*p这个整形变量的内存分配方式和i的分配方式不同
      free(p); //free(p)表示把p所指向的内存给释放掉, p本身是内存是静态的,不能由程序员手动释放,p本身
              // 的内存只能在p变量所在的函数运行终止时,由系统释放
      printf("同志们好\n");

      return 0;

      }
    4. 静态内存和动态内存的比较

      1. 静态内存是系统自动分配,由系统自动释放,静态内存是在栈分配的
      2. 动态内存是由程序员手动分配,手动释放,动态内存是在堆分配的
    5. 跨函数使用内存的问题

枚举

  1. 什么是枚举

    把一个事物所有可能的取值一一列举出来

  2. 怎样使用枚举

  3. 枚举的优缺点

    代码更安全但是书写起来比较麻烦

进制转换

16进制 0---9 A --- F 10(16) 11(17) -------1F 20 ---- 2F

8进制 0 1 2 3 4 5 6 7 逢8进1, 8->10 9->11 10->12

在汇编中:在数字后面加字母B表示二进制,加字母O表示八进制,加字母D表示十进制,加字母H表示十六进制

预备知识:

小数除以大数,则商为零,余数是小数本身

十进制--->二进制 除2取余 倒排

十进制转R进制: 除R取余 倒排

R进制转十进制:

一个十六进制位有16种状态,需要4个二进制位才能表示(2^4 = 16)

二进制转十六进制:

方法:从右到左,四位一段,分别转化,不够四位的补零

例如:(01011110)2——>(0010,1110)2左补一个零------>(2E)16

0001>>>1

0010>>>2

0011>>>3

0100>>>4

0101>>>5

0110>>>6

0111>>>7

1000>>>8

1001>>>9

1010>>>A

1011>>>B

1100>>>C

1101>>>D

1110>>>E

1111>>>F

posted @ 2020-06-21 21:46  itsalexSun  阅读(130)  评论(0编辑  收藏  举报