自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 资源 (3)
  • 收藏
  • 关注

原创 GDB调试器

编译带调试信息的程序# 禁用编译器优化,便于查阅代码时对齐gcc -g hello.c -o hello -O0# 移除调试信息strip hello启动调试调试未启动的程序gdb hello调试已启动的程序# 获取进程PIDps -ef | grep hello# attach 进程gdb attach 进程PID# 结束调试,gdb和程序分离,程序继续运行detachquit常用命令tbreak添加一个临时断点,断点一旦被触发就会被自动删除b

2022-05-04 21:10:34 412

原创 数组指针 指针的指针 二维数组

数组指针int a[5] = {1,2,3,4,5};/*以下三者数值一样,但是含义和类型不全部一样:a 数组首元素地址&a[0] 数组首元素地址&a 数组地址*/// 类型不匹配,错误int *p = &a; // p是指向int类型的指针,&a是数组a的地址,不是数组首元素a[0]的地址&a[0]// 修正 方式一int *p = a;int *p = &a[0];// 修正 方式二int

2022-04-10 18:05:35 408

原创 宏函数 可变参数 C/C++

#include <stdio.h>#include <stdarg.h>// #define __FUNCTION__ NULL/* 宏可变参数的几种定义和使用方法 */#define DEBUG#ifdef DEBUG// debug 版本定义宏调试// 方式一 C99 支持 __VA_ARGS__#define LOG(format, ...) \ my_printf(format, __VA_ARGS__)// 方式二 gcc默认支持

2022-03-30 16:37:51 1147

原创 字符char转十六进制Hex

参考:https://www.chenxublog.com/2020/03/08/c-fast-convert-hex-char-array.htmlvoid char_to_hex(char *src, int len, char *des){ char hex_table[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; while (len--) {

2021-10-22 14:32:14 4097

原创 变长数组特性

typedef struct st_type{ int nCnt; int item[0];}type_a;变长数组作为结构体最后一个成员item 不占用结构体空间,内存大小为0,即sizeof(type_a)的值为nCnt的大小变长数组的地址紧接着结构体后面分配空间时一次性分配结构体和变长数组的空间int num;...type_a *p = (type_a *)malloc(sizeof(type_a) + num * sizeof(int));...free

2021-09-13 16:34:44 127

原创 对象作为参数按值传递为什么会调用析构函数?为什么实参中的内容会被修改?

对象作为参数按值传递为什么会调用析构函数?为什么实参中的内容会被修改?因为对象按值传递时,编译器自动生成的复制构造函数进行了指针的简单拷贝,像指针直接赋值 str=s 一样,而没有拷贝指针指向的内容,这样当你将对象传递给函数时确实会有一个拷贝,但是这个拷贝会有一个指针的拷贝,所以两个对象中的 str 指向的内存一样,在退出函数时,析构销毁了函数中对象中的指针,但不幸的是这样实参对象 str 指向的内容也被销毁。...

2021-08-15 23:38:17 657

转载 第08章 函数探幽

8.1 内联函数用函数代码替换函数调用运行速度稍快,占用更多内存每一次调用都保存函数代码的一个副本有选择性使用内联函数,函数执行代码大于函数调用机制的时间,并没有那么大优势使用方式在函数声明前加 inline在函数定义前 inline通常是省略原型,将整个定义(函数头和函数代码)放在本应提供原型的地方内联函数不能递归内联与宏// 宏函数#define SQUARE(X) X*XSQUARE(5.0); // 5.0*5.0SQUARE(4.5+7.5);

2021-08-04 23:53:18 85

原创 可变参数列表

可变参数//varargs.c -- use variable number of arguments#include <stdio.h>#include <stdarg.h>double sum(int, ...);int main(void){ double s, t; s = sum(3, 1.1, 2.5, 13.3); t = sum(6, 1.1, 2.1, 13.1, 4.1, 5.1, 6.1); printf("ret

2021-08-03 10:57:35 62

原创 位字段的说明

位字段通常都不容易移植字段对维护内部定义的数据结构很有用,但是考虑到字节存放的大端小端的问题,使用位字段定义的数据不能在不同字节顺序的机器之间移动。因此,从理论上来说,使用位字段的程序是不可移植的。字段不是数组,并且没有地址,因此不能对它们使用&运算符。操控位的第2种方法是位字段(bit field)。位字段是一个signed int或unsigned int类型变量中的一组相邻的位(C99和C11新增了_Bool类型的位字段)。位字段通过一个结构声明来建立,该结构声明为每个字段提供标签,并确

2021-08-03 09:33:37 353

原创 第07章 函数

7.3 函数和数组指针和const7.6 函数和结构值传递,对结构的拷贝(副本)进行操作地址传递引用7.8 函数和array对象7.9 递归每一次递归都创建一套变量,采用栈的方式保存每一层递归的场景递归的调用呈几何级数增长,如果递归层次较多,则递归的效率很低下7.10 函数指针// 函数指针的声明double pam(int);double (*pf)(int);pf=pam;// 使用指针来调用函数double x = pam(4);double y = (*pf)

2021-08-02 22:35:26 53

原创 第06章 分支语句和逻辑运算符

nihao

2021-08-02 22:34:56 69

原创 第05章 循环和关系表达式

diwuzhang

2021-08-02 22:33:56 48

原创 第04章 复合类型

4.1 数组编译器不会检查数组下标有效性,要确保下标不越界列表初始化时注意不允许缩窄转换4.2 字符串cin 使用空白(空格、制表符和换行符)来确定字符串结束的位置,并自动在结尾添加空字符4.2.4 每次读取一行字符串getline()默认通过换行符确定结尾,丢弃换行符并在结尾添加空字符’\0’,可以通过设置参数来改变换行符作为读入结束标志在头文件istream和string中都有getline函数get()将换行符保留在缓冲队列中,下次读取输入队列时第一个就是换行符c

2021-08-01 18:26:32 86

原创 第03章 处理数据

3.1 简单变量C++命名规则只能使用字母字符、数字和下划线(_)第一个字符不能是数字区分大小写不能是关键字以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用不能超出平台的限制初始化,注意大括号初始化器 {} 的使用int owls = 10;int owls(10); // C++ 特性int owls = {10}; // C++98 以后int owls{10};int owls{}; // 初始化为 0各类整型的最大最小值限制

2021-08-01 18:26:01 86

原创 第02章 开始学习C++

iostream 和 iostream.h 的区别,是需要使用命名空间的区别#include<iostream>using namespace std;\n 和 endl 区别,endl 保证立即刷新输出缓冲区,\n 则可能在输入信息后才现提示。

2021-08-01 18:25:26 70

原创 第01章 预备知识

面向对象编程泛型编程可移植性C++11新特性Unix LinuxCC g++ 编译器CPP文件编译过程目标文件格式预编译.i编译汇编文件.s汇编目标代码.o链接可执行文件.out预编译处理(.c) --> 编译、优化程序(.s、.asm)--> 汇编程序(.obj、.o、.a、.ko) --> 链接程序(.exe、.elf、.axf等)...

2021-08-01 18:24:16 54

原创 数组的地址

数组的地址关于一个数组的地址,有以下几种方式:short tell[10];cout << tell << endl;cout << &tell << endl;cout << &tell[0] << endl;数值三种形式在数值上是相等的概念tell 和 &tell[0] 表示一个2字节内存块的地址&tell 表示的是整个数组,即一个20字节的内存块地址tell +

2021-07-23 02:25:14 2986 1

原创 C字符串处理相关函数string.h头文件

strstr函数原型:char *strstr(const char *haystack, const char *needle);参数:haystack 被检索的字符串needle 查找的字符串函数描述:在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ‘\0’返回值:该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 nullstrchr和strrchr函数原型char *s

2021-07-14 18:06:45 525

原创 regex 正则表达式匹配

参考资料:https://blog.csdn.net/liangkwok/article/details/6562121http://c.biancheng.net/cpp/html/1428.html#include<stdio.h>#include<sys/types.h>#include<regex.h>int main(int argc, char * argv[]){ int i, status; if(argc == 1

2021-07-12 11:35:41 199

转载 什么是正则表达式 ?

什么是正则表达式 ?正则表达式是一种被用于从文本中检索符合某些特定模式的文本。正则表达式是从左到右来匹配一个字符串的。“Regular Expression”这个词太长了,我们通常使用它的缩写“regex”或者“regexp”。正则表达式可以被用来替换字符串中的文本、验证表单、基于模式匹配从一个字符串中提取字符串等等。想象一下,您正在编写应用程序,并且您希望在用户选择用户名时设置规则。我们希望用户名可以包含字母,数字,下划线和连字符。为了让它看起来不丑,我们还想限制用户名中的字符数量...

2021-04-13 23:15:56 11301

原创 字节对齐、大小端问题

字节对齐联合体的内存除了取最大成员内存外,还要保证是所有成员类型size的最小公倍数结构体变量所占空间的大小必定是最宽数据类型大小的整数倍字节序大小端大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,地址由小向大增加,而数据从高位往低位放;小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,高地址部分权值高,低地址部分权值低,和我们的日常逻辑方法一致。操作系统常见小端,通讯协议常见大端0x12345678大端模式:高位

2021-04-09 10:12:31 294

原创 各类型初始化相关

类型初始化相关基本类型int *a = new int[5]; // 未初始化int *c = new int[5](); // 以默认值初始化类 类型int *str = new string[5];int *str = new string[5]{}; // 两者没有区别字符串数组初始化char c1[]={'I',' ','a','m',' ','h','a','p','p','y'}; // 10char c2[]="I am happy"; // 11 有

2021-04-07 10:35:10 54

原创 i++ 和 ++i

i++ 和 ++i行为i++: 先参与运算再自增++i: 先自增再参与运算i++ 要创建副本,然后自增,返回副本的值++i 不需要创建副本效率对于内建数据类型,效率相同;对于自定义数据类型(类),++i可以返回对象的引用,i++返回对象的值++i 不会产生临时对象i++ 在返回时有一个临时对象的创建i += 1; // ++i// 不同于i = i + 1; // i++...

2021-03-30 17:05:30 174

原创 memset

memset以字节进行填充 使用0和-1进行填充struct sample_struct{ char csName[16]; int iSeq; int iType;};struct sample_strcut stTest;// 清空stTeststTest.csName[0]='\0';stTest.iSeq=0;stTest.iType=0;// 使用memsetmemset(&stTest,0,sizeof(struct sample_struct));

2021-03-29 19:45:31 42

原创 strlen、sizeof区别

strlen、sizeof区别sizeof计算 包括 "/0"strlen计算 不包括 "/0"sizeof遇到 最后一个 "/0"停止strlen遇到 第一个 "/0"停止char str[20]="0123456789";sizeof(str); // 20strlen(str); // 10 char *ss = "0123456789";sizeof(ss); // 4 指针ss的空间大小sizeof(*ss); // 1 第一个字符‘0’占的空间strle

2021-03-29 19:40:19 181

原创 C语言内存管理

内存分配方式静态存储区全局变量 static 变量栈 效率高函数内局部变量堆堆和栈:栈:编译器分配堆:程序员手动分配对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低内存错误未成功分配assert(p!=NULL) if(p==NULL)未初始化e. 数组没有初始化越界内存泄漏操作已经释放的内存野指针,free/delete之后没有置为 NULL返回“栈”上的指针/引用调用关系复杂,需重

2021-03-29 19:29:08 83

原创 第13章 拷贝控制

13.1 拷贝、赋值与销毁拷贝构造函数拷贝构造的第一个参数是自身类类型的引用,且任何额外参数都有默认值,成为拷贝构造函数。拷贝构造函数通常不应该是 explicit ,可以接受非 const 引用。class Foo{public: Foo(); Foo(const Foo &); ...};合成拷贝构造函数编译器会自动合成拷贝构造函数。一般情况中,合成的拷贝构造函数会将其参数的成员逐个拷贝到正在创建的对象中。编译器从给定对象中依次将每个非 static 成

2020-06-09 20:20:53 154

原创 第7章 类

7.1 定义抽象数据类型类调用成员函数时把对象地址传入函数的隐式形参this,任何对类成员的直接访问都被看做this的隐式引用。const成员函数string isbn() const{ ...}const作用是修改隐式this指针的类型,将其声明成常量类型。常量对象以及常量对象的引用或指针都只能调用常量成员函数。类相关的非成员函数的定义应与类声明在通过一个头文件内。构造函数类通过构造函数初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数。构造函数不能被声明

2020-05-31 16:37:10 212

原创 第6章 函数

6.1 函数基础// 把ret和val的乘积赋给ret,然后将val减1ret *= val--;调用函数式要提供能够转换成形参类型的实参。局部静态对象static,如果没有显式的初始值,它将自动执行值初始化,内置类型的局部静态变量初始化为0。一般情况下,函数只能定义一次,但可以声明多次,如果用不到可以只有声明没有定义。分离式编译如果修改其中一个源文件,只需重新编译那个改动了的文件。大多数编译器提供了分离式编译每个文件的机制。这一过程会产生.obj(windows)或.o(unix)的目标对

2020-05-25 23:54:10 188

原创 第5章 语句

5.1 简单语句一个;就可以表示一个空语句花括号{}表示一个语句块,一个块就是一个作用域。5.2 语句作用域5.3 条件语句习惯使用花括号避免代码混乱。悬垂else,else与离它最近的尚未匹配的if匹配,从而消除程序的二义性。switch语句中case标签必须是整型常量表达式,进入case分支后只有遇到break或者switch结尾才会停止,否则执行所有的case分支代码。5.4迭代语句for/范围forwhiledo while5.5 跳转语句...

2020-05-23 23:49:33 112

原创 第4章 表达式

4.1 基础左值和右值当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(内存中的位置)。不同的运算符对运算对象要求各不相同,在需要右值的地方可以用左值来代替,但是不能把右值当成左值(位置)使用。当一个左值被当做右值使用时,实际使用的是他的内容(值)。使用decltype关键字时,左值和右值也有不同。int *p;decltype(*p) // int&decltype(&p) // int **优先级和结合律高优先级比低优先级

2020-05-22 21:47:11 188

原创 vim 配置 configuration

安装 cmakesudo apt-get install cmake安装Vimsudo apt-get install vimvim 的配色最好和终端的配色保持一致git clone git://github.com/altercation/solarized.git$ cd solarized$ cd vim-colors-solarized/colors$ mkdir -p ~/.vim/colors$ cp solarized.vim ~/.vim/colors/$ vi ~

2020-05-21 11:03:19 600

原创 第3章 字符串、向量和数组

3.1 命名空间using声明命名空间中的名称使用:使用using引入// 全部引入using namespace::std;// 部分引入using std::cin;using std::cout;...显示调用int main(){ ... std::cout<<...; ...}头文件不应包含using声明,避免产生冲突3.2 标准库类型string#include <string>using std::st

2020-05-20 22:38:33 142

原创 第2章 变量和基本数据类型

2.2 变量C++11 初始化方式int units_sold = 0;int units_sold = {0};int units_sold{0};int units_sold(0);内置类型使用列表初始化且初始值存在丢失信息的风险,编译器将报错long double ld = 3.1415926536;int a(ld), b = {ld}; // 存在数据丢失风险,报错int c(ld), d = ld; // 正确函数体外的内置类型变量默认初始化为0,函数体内为初始化的内

2020-05-18 23:49:51 216

原创 第5章 标准IO库

第五章 标准I/O库5.2 流和 FILE 对象普通 I/O,文件描述符与文件关联标准 I/O,流(stream)与文件关联流的定向决定是单字节流还是 多字节流(宽)。两个函数可以改变流的定向 fwide 和 freopen。fwide#include <wchar.h>int fwide(FILE *stream, int mode);mode参数:参...

2020-02-27 18:25:11 462

原创 VMware虚拟机错误提示:锁定文件失败 打不开磁盘 未能启动虚拟机

问题虚拟机提示锁定文件失败,打不开磁盘所依赖的某个快照磁盘。虚拟机无法正常启动原因虚拟磁盘(也就是vmdk)会有一个磁盘保护机制,这也是为了防止出现有多个虚拟机同时访问一个虚拟磁盘的情况,因为这可能会导致性能减弱甚至是数据丢失。所以每次启动虚拟机的时候都会使用扩展名为.lck的文件来对虚拟磁盘进行锁定保护,当虚拟机安全关闭时这个文件就被删除掉了。解决删除虚拟机文件夹中的所有.lck文...

2020-02-21 17:32:18 856

原创 第3章 文件I/O

第三章 文件I/O代码第三章代码 Github3.1 引言常用不带缓冲(unbuffered)的I/Oopenreadwritelseekclose不带缓冲: 每个read和write都调用内核中的一个系统调用,是POSIX.1和Signal UNIX Specification的组成部分,不是ISO C组成部分。3.2 文件描述符文件描述符范围:0~OPEN_...

2020-02-21 16:56:35 252 1

原创 Linux 测试用大文件生成

dd命令可以创建指定大小的文件命令: dd if=/dev/zero of=test bs=1M count=1000会在当前目录下生成一个大小为1M*1000=1000M大小的test.img文件,它的内容都是0(因从/dev/zero中读取,/dev/zero为0源)但是这样为实际写入硬盘,文件产生速度取决于硬盘读写的速度,如果要产生超大文件,速度会很慢。在某些场景下,我们只想...

2020-02-20 22:18:58 919

原创 UNIX 功能测试宏

UNIX 功能测试宏在头文件中定义了很多POSIX.1和XSI的符号。但是除了POSIX.1和XSI的定义之外,大多数实现在这些头文件中也加上了它们自己的定义。如果在编译一个程序时,希望它只使用POSIX定义而不使用任何实现自己定义的限制,那么就需要定义常量_POSIX_C_SOURCE。所有POSIX.1头文件中都使用此常量。当定义该常量时,就能排除任何实现专有的定义。注:POSIX.1标准...

2020-02-20 20:46:17 337

原创 查找系统数据类型,以 clock_t 为例

查找系统数据类型,以clock_t为例头文件位置很多与实现有关的数据类型例如clock_t、time_t在头文件<sys/types.h>中定义。使用locate或者find命令查找文件locate模糊匹配find完全匹配locate types.h | grep "/usr/include"# 或者find /usr/include -name types.h...

2020-02-18 20:51:01 477

mentohust Linux校园网认证客户端

Mentohust是由华中科技大学首先是在Linux系统下开发出来,而后扩展到支持Windows、Linux、Mac OS下的锐捷认证的程序(附带支持赛尔认证),兼容Windows、Linux和MacOS所有主流版本,完美代替锐捷认证。

2017-04-02

J-Falsh arm 烧写工具

J-flash arm是单独的Flash ISP烧写软件,把单独的bin文件或者hex文件烧写到单片机的flash里面去,在开发ARM9、ARM11的时候,对于已经批量生产的产品,在下生产线之后,需要我们对其控制器烧写程序的时候,厂家一般都只会提供一个bin文件,这时就又要用到j-flash arm

2017-03-21

J-Falsh arm 4.3

2017-03-20

空空如也

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

TA关注的人

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