美文网首页
C语言知识点快速回顾

C语言知识点快速回顾

作者: senpaiLi | 来源:发表于2019-03-19 02:07 被阅读0次

    WHY 为什么要回顾C语言?
    iOS做的时间也不短了,差不多有了三年时间,业务需求做的越久越觉得,我们需要拓宽自己的视野
    为什么有些同学会觉得,进步哪怕一点点都很难?很多时候,我们只是被自己的认知给限制住了,在很多没有特别大价值的地方,浪费了太久的时间。
    C语言,有助于我们了解底层逻辑,我们要经常复习,并且“看穿”一些高级语言的把戏,唯有机器思维才能更好的了解机器。

    WHO 我们需要从哪方面着手?
    基础知识,内核管理,内存管理。。。

    HOW 如何熟悉?
    整理一些属于自己的文档,学而时习之,温故而知新。

    WHAT LET'S GO

    一、一般数据类型
    类型 占用字节 占用位数
    byte 1 8
    char 1 8
    boolean 1 8
    short 2 16
    int 4 32
    long 8 64
    float 4 32
    double 8 64

    注:long所占的字节数跟操作系统位数有关,32位占4个字节,64位占8个字节。

    n个字节数的取值范围:-2^ {n-1} ~ 2^{n-1}-1,无符号位:0 ~ 2^n -1
    超出字节位数,会出现数字错乱的情况.

    为什么是这样的,这涉及到原码反码补码的概念:
    原码:在数值前直接加一符号位的表示法。
    反码:正数即本身,负数对1求补,这里的1,本质上是一个有限位计数系统里所能表示出的最大值。
    补码:正数即本身,负数对2求补,这个2指的是计数系统的容量(模)
    tip:本质上来说,反码和补码都是用来处理负数的

    :二进制下,有多少位数参加运算,模就是在 1 的后面加上多少个 0。
    负数的补码不存在0,10000000代表 -2^ 7

    常用到的格式化输入输出

    去掉小数点后无效0  %g
    保留小数点后两位   %.2f
    
    二、运算符

    与:&& 或:|| 非:!

    逻辑 && 和 || 的短路情况
    如果 && 左边为false,||左边为true,右边的逻辑判断会不执行

    条件运算符:表达式1 ? 表达式2 : 表达式3
    1为true执行2,否则执行3

    sizeof():计算该数据类型所占内存空间

    字符串的四个函数:
    求长度函数 strlen();
    拷贝函数 strcpy();
    连接函数 strcat();
    比较函数 strcmp();

    三、结构体

    C语言中构造类型包括,数组(相同数据类型的集合)和结构体(不同数据类型的集合)

    一般结构体的类型为 struct+结构体名 ,所以可以用typedef为这个类取一个别名。

    分配原则:自上而下分配内存空间;当上一个成员被分配的内存空间足够下一个成员使用,则下一个成员不需要分配内存;每次分配一个最大数据类型的字节空间;总字节空间为最大数据类型的整数倍。

    匿名结构体:可以在结构体中声明某个联合体(或结构体)而不用指出它的名字,如此之后就可以像使用结构体成员一样直接使用其中联合体(或结构体)的成员。

    四、内存地址和指针

    内存中的编号就是内存地址,指针就是地址。

    整形变量:用来存储整形数据的变量
    指针变量(指针):存储地址的变量。

    取值运算符 * ,取址运算符&

    指针所占字节数只与操作系统位数有关,与指针类型无关

    (指针式学习C语言的难点)

    内存区的划分:
    地址从小到大:代码区,常量区,静态区(全局区),堆区,栈区。
    注意:OC中除了有限的几个对象之外,所有的对象全部存储在堆区。

    代码区:用来存放代码的二进制文件,例如函数(main,sum)
        
    常量区:存放常量,只可读不可被修改(1,100,'a');
    指针的赋值就是指针的重指向,指向常量的指针也是可以赋值的。
    
    静态区(全局区):静态区的变量从程序开始运行就存在,一直到程序退出才会被释放.
    这里的不是说作用域,说的是生命周期。静态区的变量只会被初始化一次。static修饰的变量先于main函数执行。
    (OC的#define也是放在静态区的)
        
    堆区:唯一一个由程序员自己申请内存,自己释放内存的区域。
    内存申请函数:malloc,calloc,realloc;
    内存释放函数:free
    
    栈区:申请内存的模式采用先进后出,后进先出。类似于死胡同,电梯。
    栈底的地址高,栈顶的地址低。先入地址高,后入地址低。栈区的内存空间在8M左右。
    
    五、位(比特、bit)

    比特(英语:Bit),亦称二进制位,指二进制中的一位,是信息的最小单位。
    Bit是Binary digit(二进制数字)的缩写。

    由此可见,一个比特有2个数变化,二个比特有4个数变化,而当有N个比特有2^n个数变化。

    位运算

    取反(NOT):许多程序设计语言,取反操作符用波浪线"~"表示。
    值得注意的是此操作符与"逻辑非(!)"操作符不同。逻辑非将数字整体看做一个布尔类型 "布尔 (数据类型)")--将真值转化为假,将假值转化为真;而C语言将0转化为1,将非零值转化为0。"逻辑非"并不是一个位操作。

    按位或(OR):在C类程序设计语言中,按位或操作符是"|"。这一操作符需要与逻辑按位或运算符(||)区别开来。

    按位异或(XOR):在类C语言中,按位异或运算符是"^"。

    按位与(AND):在类C语言中,按位与用'&'表示 。

    移位:在类C语言中,左移使用两个小于符号"<<"表示,右移使用两个大于符号">>"表示。

    字节(Byte),通常用作计算机信息计量单位,不分数据类型。

    一个字节代表八个比特。而1kb=1024byte

    常用编码模式:
    ASCII码:一个英文字母(不分大小写)占一个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数。换算为十进制 ,最小值-128,最大值127。如一个ASCII码就是一个字节。
    UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节
    Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节

    相关文章

      网友评论

          本文标题:C语言知识点快速回顾

          本文链接:https://www.haomeiwen.com/subject/nhadmqtx.html