自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Roger's Blogs

砥砺前行

  • 博客(40)
  • 资源 (1)
  • 收藏
  • 关注

原创 数据结构之栈的顺序存储结构实现

栈的顺序存储结构实现 栈的数据元素之间的一一对应的关系可以利用顺序的存储来表示, 那么可以利用数组来实现栈数据结构.// 栈的数组实现struct stack_record;typedef struct stack_record * stack;stack init_stack(int max_elements); // 初始化操作, 建立空栈void dispose_st...

2018-05-29 01:44:58 1180

原创 数据结构之栈的基本概念

栈的基本概念 栈是限定只能在表尾(栈顶)进行插入和删除操作的线性表, 所以栈又称为后进先出(LIFO)的线性表. 典型的栈结构如图: 重要概念: 入栈 push: 入栈也称压栈, 指的是栈的插入操作, 在栈顶位置插入新的数据元素. 出栈 pop: 出栈也称弹栈, 指的是栈的删除操作, 删除栈顶位置的数据元素栈的抽象数据类型ADT stackData 每个数据元素...

2018-05-27 19:47:51 1911

原创 数据结构之线性表的链式存储实现(链表)

链表由一系列在内存中相连的结点组成, 每个结点均含有数据域和指针域, 数据域存储数据, 指针域存储指向下一个结点的指针. 链表的结构如图:

2018-05-27 19:46:20 7217

原创 数据结构之线性表的顺序存储实现

线性表

2018-05-23 17:42:02 360

原创 数据结构之线性表的基本概念

线性表是零个或多个数据元素的有限序列. 需要注意的是: 1. 线性表中的数据元素是有顺序的 2. 线性表中数据元素的数量是有限的 3. 线性表中数据元素个数可以为零 如图按下标排序的数据元素就可以认为是一个线性表: 线性表基本概念 线性表长度:线性表中数据元素个数称为线性表的长度, 长度为零的表称为空表. 前驱:某个数据元素的前一个数据元素称为该元素的前驱, 每个元素至多有一个...

2018-05-23 17:41:06 1096

原创 数据结构与算法预备知识

待补充

2018-05-18 15:39:23 314

原创 Linux驱动之驱动的基本概念

硬件是计算机系统的底层基础,代码最终会转化为硬件上的组合逻辑与时序逻辑;应用软件调用接口完成具体的任务. 软件工程师在使用接口函数时不应该考虑接口具体是怎么实现的.驱动与底层硬件直接打交道, 按照硬件设备的具体工作方式. 读写设备的寄存器, 完成设备的轮询, 中断处理, DMA通信, 进行物理内存向虚拟内存的映射实现各种接口函数, 充当了硬件与应用软件中间的桥梁.驱动工程师负责编写驱动程序...

2018-04-24 22:09:52 1372

原创 C语言之预处理器

预处理器在源代码编译前对其进行一些文本性质的操作, 主要任务包括删除注释, 插入被 #include 指令包含的文件的内容, 定义和替换由 #define 指令定义的符号以及确定代码的部分内容是否应该根据一些条件编译指令进行编译.#define指令 #define 指令主要有两种用法: 定义常量: #define name stuff 当源代码中出现 name 符号时都会被原封不动的替...

2018-04-21 21:16:37 2557 1

原创 C语言之指向函数的指针

这里介绍了关于指向一维数组的指针, 相关内容可以参考该文. 本文将简要介绍指向函数的指针.如何声明一个指向函数的指针?void print(int num); // 声明函数void (*funptr)(int) = print; // 声明指向函数的指针, 该函数接受一个int参数, 返回void, 并用print函数的地址初始化函数指针类型的通用形式: 返回类型 (...

2018-04-20 19:17:19 10078 7

原创 C语言之指向一维数组的指针

int array[5] = {1, 2, 3, 4, 5}; // 定义数组int *intptr = array; // 定义指向数组元素的指针int (*arrayptr)[5] = &array; // 定义指向数组的指针上述三条语句分别定义了数组, 指向数组元素的指针和指向数组的指针. 内存情况如图示: 对于指向数组元素的指针很好理解, 但是怎样理解 指向数组的指针...

2018-04-17 11:41:53 57538 6

原创 如何自定义对象字节对齐方式?

C语言中, 每个完整的对象都具有字节对齐要求. 比如基本数据类型一般参照类型本身大小字节对齐, char类型对象按1字节对齐, short类型按2字节对齐等. C11中提供了 查看 和 自定义 对象字节对齐方式的方法. 关于字节对齐见这里查看对象字节对齐方式: _Alignof 操作符用法: _Alignof(typename) 返回size_of类型的typename类型对象的对齐方式...

2018-04-16 16:13:31 714

原创 字节对齐

一般计算机架构中都会有地址总线和数据总线, 地址总线一般决定了机器可访问内存的大小, 比如8086PC有20条地址总线, 可访问的内存为2的20次方共1048576个字节(1MB); 数据总线则决定了机器单次读写可处理数据的大小, 8086CPU有16条数据总线, 每次可传送给CPU的数据大小最多为16位(2Byte).通常我们所说的 “计算机是64位的” “32位的系统” 等指的是机器的数据...

2018-04-16 13:17:48 439

原创 C语言之联合与变体记录

结构体是将一个对象(内存空间)解释为C语言中多种类型的综合. 联合 是将一个对象(内存空间)在不同时候解释为C语言中不同的类型.// 联合union { float f; int i;} fi;当使用 fi.f 时, fi所占内存中的内容将被解释为一个float数; 当使用 fi.i 时, fi所占内存中的内容将被解释为一个int类型. 注意: 如果联合的各个成员具...

2018-04-14 15:32:43 1038

原创 C语言之位段

结构体可以用来实现 位段, 在C语言中多数情况下按照一个字节的整数倍为单位处理数据, 也就是必须是以 8位 为单位处理数据, 比如一个char为8位, 一个int可能为32位. 位段使我们可以按 “任意” 位处理数据, 比如7位, 6位等. 位段的声明如下:// 位段声明// [类型] [标识符] : [位宽表达式]struct CHAR { int32_t ch ...

2018-04-14 14:11:24 2472

原创 C语言之结构的自引用与互引用

自引用 在一个结构内部包含一个类型为该结构本身的成员称为结构的自引用. 比如:// 结构的自引用struct self_ref { int a; struct self_ref b; char c;};这种类型的结构自引用是 非法 的, 成员b中又会包含一个self_ref结构, 如此递归下去永无止尽. 下面这种声明却是合法的:// 另一种自引用...

2018-04-14 13:32:35 1419

原创 C语言之数组名

我们知道数组名实际上是一个指针. 问题的关键是数组名指向的内容是什么.对于一维数组来说, 数组名是指向数组第一个元素的内存空间的指针常量. 比如: int array[10]; 数组名array代表的就是array[0]的地址. array+1 代表的是array[1]的地址, 也就是说 array的步进间隔为一个int变量所占的内存空间.对于二维数组来说, 数组名是指向数组第一维元素的...

2018-04-14 11:47:21 798 1

原创 C语言之复杂结构体的访问

任意一个可以在结构外部声明的变量都可以作为结构的成员. 包括数组, 指针, 其他结构等. 对于结构成员的访问可以使用 点操作符(.) 和 箭头操作符(->) 完成. 本文举例介绍复杂结构体成员的访问. 结构体声明如下:// 创建新的结构类型Tagtypedef struct{ int num; short date[3];} Tag;// 创建新的结构类型Ms...

2018-04-13 23:43:22 2101 3

原创 C语言之数组下标引用与间接引用

数组元素的访问方式有下标引用和间接访问两种. 除了优先级之外, 下标引用和间接访问完全相同. arrayname[subscript] = *(arrayname + (subscript)) 例如:int arrayname[10];int *arrayptr = arrayname + 2;arrayptr = arrayname+2 = &arrayname[2]...

2018-04-13 21:47:24 3777

原创 C语言之指针表达式

本文主要以一个例子分析一些复杂的指针表达式. 首先定义变量如下:char ch = 'a';char &ptr_ch = &ch;char **pptr_ch = &ptr_ch;假设设备有64KB的内存, 地址标号为 0x0000~0xFFFF, 再假设执行上述代码后内存分配情况如下图: 表达式 作为右值 作为左值 ch...

2018-04-13 20:45:37 960

原创 C语言之安全的动态内存分配

动态内存分配最常见的错误就是忘记检查所请求的内存是否分配成功. 可以利用 宏 实现安全的动态内存分配.// alloc.h#include <stdlib.h>#define malloc 不要直接使用malloc // 直接使用malloc将无法编译#define MALLOC(num, type) (type *)alloc((num) * sizeof(type))...

2018-04-04 22:26:52 345

原创 C语言之字符数组的初始化

C语言字符数组有几种不同的初始化方式, 它们之间存在着一些差别.char message1[] = {'h', 'e', 'l', 'l', 'o'}; 执行上述初始化后内存情况为: 注意到字符数组并不是以 ‘\0’ 结尾.char message2[] = {'h', 'e', 'l', 'l', 'o', '\0'}; 执行上述初始化后内存情况为: 手动加上了 ‘\0’...

2018-03-22 23:21:41 1802 1

原创 C语言之可变参数列表

对于函数参数的个数或者类型在编写函数时未确定的情况, C语言允许使用 可变参数列表, 用 , ... 来表示. 使用可变参数列表要注意:含有可变形参的形参列表中, 至少要有一个确定类型的形参在可变参数列表 (, ...) 的后面不能再跟其他形参由于可变参数列表中的形参类型不确定, 所以编译器将对传入的实参执行默认 实参提升, 比如传入实参为char型, 将自动提升为int型需要借助 s...

2018-03-22 21:15:01 1209

原创 C语言之存储类说明符

作用域 链接属性 存储时期 存储类型内容请先参考博文C语言有5中存储类型修饰符: auto register static extern typedef 下面分别介绍各说明符的用法:auto: 表明变量具有自动存储类型 auto说明符只能用在具有代码块作用域的变量的声明中, 但是由于这类变量本身就具有自动存储类型(存储于运行时堆栈中), 所以auto通常只是起显式说明的作用....

2018-03-22 14:18:36 1559

原创 C语言之作用域 链接属性 存储时期 存储类型

重要的概念 标识符: C语言中变量名, 函数名, 函数参数名都称为标识符. 作用域: 标识符的作用域指的是此标志符在当前源代码中可见(可被访问)的范围 链接属性: 标识符的链接属性指的是如何处理不同文件中出现的相同标识符 存储时期: 变量的存储时期指的是变量内存在程序执行中存在的时期 存储类型: 变量的存储类指的是存储变量的内存的类型 存储类说明符: C语言的存储类说明符用来改变标识...

2018-03-22 14:16:12 414 2

原创 Intel与ARM

Intel(英特尔) 与 ARM 都是全球知名的 CPU 设计公司(Intel兼顾生产). 本文主要通过介绍这两家公司了解目前市场上的主流CPU,.公司简介 Intel 公司位于美国, 主要设计CPU架构, 提供指令集, 生产各种CPU , PC端的经常听到的赛扬系列, 酷睿系列, 至强系列都是其设计生产的CPU. 目前Intel的市场主要在PC端CPU, 以及服务器CPU等. AR...

2018-03-20 15:26:46 1735

原创 ARM处理器型号

ARM公司拥有众多CPU指令集, CPU架构, CPU系列. 本文旨在介绍ARM公司的CPU产品线. 下图展示了ARM公司CPU的产品线: 首先有必要了解一下ARM公司的命名规则: ARM的命名规则, 大致分成三类 1. 基于ARM Architecture版本的“指令集架构”命名规则 2. 基于ARM Architecture版本的“处理器系列”命名规则 3. 基于ARM A...

2018-03-18 21:50:32 12541

原创 C语言之短路求值

C语言的逻辑操作符 && , || 具有 短路求值 的特性.逻辑与 && && 操作符的左操作数总是首先进行求值, 如果它的值为真, 则继续计算右操作数的值, 然后执行与操作得到表达式结果; 如果它的值为假, 根据与操作 有假则假 的性质可以断定该表达式的值为假, 所以不再计算右操作数的值.逻辑或 || || 操作符的左操作数也是首先进行...

2018-03-17 19:30:31 3264

原创 C语言之逻辑移位与算术移位

C语言的移位操作符 >> << 可以将值按照二进制位左移或右移. 具体的实现方式如下:左移 << 左移时值最左边的几位被丢弃, 右边多出来的空位用 0 补齐. 右移 >> 右移时值最右边的几位被丢弃, 对于无符号数, 跟左移时一样空位补 0, 对于有符号数, 左边多出来的空位的有两种选择: 逻辑右移 会将空位补 0, 算术右...

2018-03-17 10:41:24 6011 3

原创 C语言之char类型的符号

char 类型所占的存储空间一般为 1byte, 实际上char类型要么是 signed char 要么是 unsigned char, signed char 的范围是 -127~127, unsigned char 的范围是 0~256, char具体是signed还是unsigned取决于编译器. 这就带来了可移植性问题. 一个解决方案是使用char时显式的规定char为signed ...

2018-03-16 23:45:20 6067

原创 存储器

存储器是计算机系统中的记忆设备, 计算机中全部信息, 包括输入的原始数据, 计算机程序, 中间运行结果和最终运行结果都保存在存储器中. 构成存储器的存储介质, 目前主要采用半导体器件和磁性材料. 存储器中最小的存储单位就是一个双稳态半导体电路或一个CMOS晶体管或磁性材料的存储元, 它可存储一个二进制代码,. 由若干个存储元组成一个存储单元, 然后再由许多存储单元组成一个存储器, 一个存储器包...

2018-03-16 17:51:29 551

原创 大端和小端问题

大端(Big-endian)和小端(Little-endian)是两种存储数据的字节序. 大端: 数据的最高位存储在起始地址单元处, 低位存储在最高地址单元处. 小端: 数据的最低位存储在起始地址单元处, 高位存储在最高地址单元处, 比如:将十六进制数 0x01234567 存储在地址 0x100 处: 大端模式数据的高位(符号位)首先被机器取出, 便于快速判断正负. ...

2018-03-14 17:19:09 1196

原创 Chapter 9: Sequential Containers

顺序容器概述 顺序容器 存取 插入删除 vector(可变大小数组) 快速随机存取 尾部快,其他慢 deque(双端队列) 快速随机存取 前端尾部快 list(双向链表) 双向顺序存取 所有位置都很快 forward_list(单向链表) 单向顺序存储 所有位置都很快 array(固定大小数组) ...

2018-03-10 14:23:37 150

原创 Chapter 8: The IO Library

IO即 Input和Output, C++通过一组定义在标准库类型中的类型处理IO, IO的目标对象可以是设备(文件, 控制台窗口等)或者内存(string类型).IO库类型有哪些? iostream头文件下定义的IO类型 istream, wistream: 从流中读取数据otream, wostream: 向流中写入数据iostream, wiostream: 读写流fst...

2018-03-10 14:22:58 147

原创 Chapter 7 : Classes(Second Part)

这篇接着First Part通过构造Screen和Window_mgr介绍类的其他特性. 首先介绍要构造的Screen和Window_mgr这两个类:Screen表示显示器的一个窗口类型成员包括: 代表string::size_type类型的pos成员数据成员包括: string类型的contents成员, 存储显示的内容.三个string::size_type类型的cursor...

2018-03-06 17:16:34 168

原创 Chapter 7: Classes(First Part)

这一章介绍类的特性, 不同以往, 我参照课本, 用构造Sales_data类的过程来介绍类的基本特性, 并在下篇介绍类的其他特性. 我会集中关注这样三个问题: 代码这样写是什么意思? 代码这样写行不行? 为什么要从这个版本改进到下一个版本?首先介绍一下要构造的Sales_data类:Sales_data类用来记录书籍的销售记录, 以及对销售记录进行基本操作.数据成员包括:str...

2018-03-04 15:46:44 182

原创 Chapter 6: Functions

什么是局部对象? 它的的生命周期是怎样的? 形参和在函数体内部定义的变量统称为局部变量, 仅在函数作用域内可见. 其生命周期依赖于定义的方式. 局部对象有两种: 自动对象 当函数执行到对象定义语句(函数内部)时创建该对象, 当执行到对象所在块(其实是对象名的作用域)末尾时销毁该对象.局部静态对象 当函数执行到对象定义语句(函数内部)时创建该对象, 直到程序终止时销毁该对象. ...

2018-03-04 15:45:17 124

原创 Chapter 5: Statements

为什么不要在switch语句内部定义变量? 考虑这样一种情况: 如果我们在switch语句的某个case中定义了一个变量并显示初始化, 而在另一个case中要用到这个变量, 那么当程序执行时跳过了定义变量的case时, 程序报错”变量由case标签跳过”(VS2015实测). 再考虑另一种情况: 如果我们在switch语句的某个case中定义了一个变量但不显式初始化, 而在另一个case中要...

2018-03-04 15:42:38 136

原创 Chapter 4: Expressions

优先级 结合律 求值顺序各自的意义 优先级和结合律共同确定了表达式的组合方式, 对于一个复杂的表达式, 高优先级运算符的运算对象相对于低优先级的运算符运算对象先结合在一起, 优先级相同的运算符运算对象依靠结合律来组合. 运算符满足左结合律意味着如果运算符优先级相同, 将按照从左向右的顺序组合运算对象.6 + 3 * 4 / 2 + 2 // 复杂的表达式// (1)乘除运算符的优先...

2018-03-04 15:42:13 126

原创 Chapter 3: Strings Vectors and Arrays

string类型是怎样比较大小的? 如果两个string对象的长度不同, 而且较短的string对象的每个字符都与较长string对象对应位置上的字符相同, 则较短string对象小于较长对象.如果两个string对象在某些对应位置上不一致, 则比较第一对相异字符.当两个string对象长度相等, 所有字符对应相同, 则string对象相等.使用string类型时要注意的地方 ...

2018-03-04 15:41:36 159

原创 Chapter 2: Variables and Basic Types

默认初始化 如果定义变量时未对变量初始化, 变量会被默认初始化, 初始化所用的初始值由变量类型和变量定义的位置共同决定. 定义在任意函数体之外的变量将初始化为0值; 定义在函数体之内的变量将不被初始化; 类类型的初始化由类自己决定(默认构造函数或自定义构造函数).复合类型的声明与定义 通过基本数据类型, 类型修饰符, 声明符可以声明或定义复合类型int *ptr = ...

2018-03-04 15:41:13 215

C_Primer_Plus_编程练习答案

C_Primer_Plus_编程练习答案.

2015-10-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除