![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 87
超级峰
这个作者很懒,什么都没留下…
展开
-
2 C语言位操作
常用位操作位异或:两位都相等,结果为0,不相等则为1左移位:将一个操作数的各二进制全部左移若干位,左边移除出去的二进制位丢弃,右边的二进制位补0。每进行一次左移位操作,得到的结果是原来操作数的一倍(x<<n=x*2^n)右移位:将一个操作数的各二进制全部右移若干位,右边的二进制位补0或补1(如果操作数是无符号数或是有符号正数补0,如果是有符号负数补1),右边移除出去的二原创 2018-11-28 14:47:32 · 177 阅读 · 0 评论 -
12 多线程和状态机
1 多线程操作系统下的并行执行机制进程和线程的区别与联系任意时刻,CPU总是运行一个进程,其他进程处于非运行状态。一个进程可以包括多个线程,一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。多线程的优势保证多线程程序在运行时,操作系统会优先将多个线程放在多个核心中分别单独运行。...原创 2019-08-05 21:11:50 · 465 阅读 · 0 评论 -
11 链表
1 链表的概述链表就是用锁链连接起来的,锁链指的是指针,表指的是存放数据的节点。链表是由若干个节点组成,各个节点的结构完全类似,都是由有效数据和指针两部分组成,有效数据区用来存储有效数据信息,而指针用来指向链表的前一个或者后一个节点,链表就是利用指针将各个节点进行串联起来的链式存储的线性表。链表与数组的比较链表的优点是操作灵活,插入删除效率很高,但是缺点是需要额外分配存放节点地址的空间,而且...原创 2019-08-05 21:11:37 · 83 阅读 · 0 评论 -
8 C语言预处理、函数和函数库
1 预处理编译器本身的主要目的是编译源代码,将C语言的源代码转化成.s的汇编代码。编译流程图在Linux系统中,GCC编译程序会读取源代码.c文件,并且将其翻译成一个可执行文件.out,整个过程共四个阶段,由编译工具链完成。.c C语言源代码文件;.h 头文件;.i 预处理文件;.s 汇编文件; .o 目标文件(二进制文件);.out 可执行文件第一过程:预处理(cpp)在命令行输...原创 2019-08-05 21:10:50 · 189 阅读 · 0 评论 -
7 结构体、共用体和枚举
结构体概述1 结构体使用时先定义结构体类型,再用类型定义变量2 结构体变量中的元素访问方式只有一种,用句点.或者箭头->。3 结构体的对齐访问访问结构体时需要对齐访问,主要是配合硬件,也就是说硬件硬件本身有物理上的限制,因此对齐排布和访问可以提高访问效率,对齐访问牺牲了内存,但换取了速度性能。对齐访问的规则和运算(1)当编译器将结构体设置为4字节对齐时,结构体整体必须从4字节对齐...原创 2019-08-05 21:10:19 · 104 阅读 · 0 评论 -
6 特殊的数组-字符串
1 字符串类型要点1字符串类型是通过制度指针来实现的,如char * p = " linux ",p中存放了字符串的第一个字符地址,这个地址就是字符串地址。要点2C语言中字符串使用的三个核心:(1)用一个指针指向字符串头;(2)字符串总是以‘\0’结尾,但字符串的实际内容不包括‘\0’;(3)组成字符串的各字符的地址彼此连续。要点3指向字符串的字符变量空间和字符串存放的空间是分开...原创 2019-08-05 21:10:33 · 152 阅读 · 0 评论 -
10 C语言关键细节
1 操作系统的概述操作系统的主要任务是管理所有资源,为产生直接价值的程序(各种应用程序)提供服务,所以操作系统就是管理者和服务者。操作系统负责管理和资源调配,应用程序负责具体的直接劳动,当应用程序需要使用系统资源(如内存、CPU、硬件操作等)时需要通过API函数向操作系统发出申请,然后操作系统响应,帮助应用程序执行功能。C库函数在封装API函数时,尽量使用了同一套接口,所以封装出的库函数相...原创 2019-08-05 21:11:23 · 74 阅读 · 0 评论 -
3 指针
底层驱动的操作离不开指针,驱动程序的目的是为了管理硬件,驱动程序管理硬件的媒介是寄存器(一种特殊的内存),通过对寄存器的读写,实现对硬件的功能设置以及数据的存取。1.1 什么是指针1.1.1 普通变量普通变量的目的是为了存放普通数据,对于变量空间来说,不管是读还是写,变量是存放数据的手段。1.1.2 指针变量在大多数情况下,指针指的是指针变量,指针变量存放的数据是内存地址。一般情况,如果...原创 2018-11-28 14:48:07 · 134 阅读 · 0 评论 -
5 指针与函数
1.1 指针与函数传参1.1.1 普通传参C语言中值传递的本质是,当调用被调函数时,被调函数会在自己的函数栈中开辟相同类型的形参空间,并且将传递过来的值写入形参空间保存。1.1.2 传递地址(指针)传递地址和普通传参没有本质的区别。传递地址和普通传参都是值传递,实参是数值,也可以是变量。1.1.3 传递数值数值没有普通值传递,因为普通值传递需要的形参空间大,效率低,所以只有地址传递。...原创 2019-08-05 21:09:56 · 149 阅读 · 0 评论 -
#define和typedef
1 #define和typedef的区别#define和typedef都可以用来给现有类型起别名,但#define只是简单的宏替换,在预编译时被处理;而typedef不是的,在编译时被处理。区别一#define dchar char *typedef char * tchar;dchar p1,p2; //等价于char *p1,p2;只是p1才是指针变量char * 类型,p2是...原创 2019-08-12 21:12:01 · 112 阅读 · 0 评论 -
9 存储类、作用域、生命周期、链接属性
Linuxc下C程序的内存映像代码段、rodata段(只读数据段)对应程序中的代码(函数)、代码段在Linux中又叫文本段(.text);rodata段常常用于存储常量数据,也被称为只读段,比如修饰的常量有可能存储在rodata段中。数据段、bss段data段:存放被初始化为非0的全局变量;被初始化为非0 的static局部变量;bss段:存放未初始化的全局变量;未初始化的stati...原创 2019-08-05 21:11:07 · 102 阅读 · 0 评论 -
4 数组
1.1 数组数组方便一次定义大量变量空间,而且也方便访问,访问时利用地址累加,访问每个数组空间即可。1.1.1 一维数据中的关键符号以int buf[100] = {0} 为例buf:一是数组名,sizeof(buf)时,buf就是数组名的含义;二是等价于&buf[0],表示数组第一个元素的首字节地址,是一个常量值。buf[0]:第一个元素的空间,可以对其进行读写操作。&amp...原创 2018-11-28 14:49:57 · 545 阅读 · 0 评论 -
1 C语言与内存
C语言与内存1 计算机程序1.1 程序程序就是一堆代码加一堆数据,程序=数据+算法。1.2内存内存分为静态内存(SRAM)和动态内存(DRAM)。静态内存是指程序开始运行时由编译器分配的内存,它的分配是在程序开始编译时完成的,不占用CPU资源;由于堆空间只能在程序运行时被使用,因此堆空间也被称动态内存,另外,动态内存只能在程序运行时通过指正对分配给各种变量、字符串和数组(只能通过指针来访...原创 2018-11-28 14:47:06 · 163 阅读 · 0 评论 -
解析Linux内核
解析Linux内核1 基本知识1.1 什么是Linux内核内核是操作系统的核心部分,为应用程序提供安全访问硬件资源的功能。内核向应用程序提供了统一和简洁的接口,降低应用程序设计的复杂程度,内核可以被看做是一个系统资源管理器,管理计算机系统中的所有软件个硬件。1.2编译内核本节介绍在PC上如何编译生成2.6版本的内核目标文件。Linux内核编译配置提供多种方式,如下所述。make co...原创 2019-08-12 21:11:46 · 117 阅读 · 0 评论