自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 Makefile 的使用

make主要解决两个问题:1) 大量代码的关系维护大项目中源代码比较多,手工维护、编译时间长而且编译命令复杂,难以记忆及维护。把代码维护命令及编译命令写在 makefile 文件中,然后再用 make 工具解析此文件自动执行相应命令,可实现代码的合理编译2) 减少重复编译时间在改动其中一个文件的时候,能判断哪些文件被修改过,可以只对该文件进行重新编译,然后重新链接所有的目标文件,节省编译时间Makefile文件命名规则makefile和Makefile都可以,推荐使用 Makef

2021-08-16 23:05:04 6305

原创 GDB 调试器的使用

1、生成调试信息一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(gcc/g++)的 -g 参数:gcc -g hello.c -o hellog++ -g hello.cpp -o hello如果不加参数 -g,将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。2、启动gdb工具测试代码:void func(){ for(int i = 0;i<...

2021-08-14 23:13:26 187

原创 Vim工具的使用

一、vim 工作模式vi有三种基本工作模式:命令模式、文本输入模式(编辑模式)、末行模式1、命令模式任何时候,不管用户处于何种模式,只要按一下ESC键,即可使vi进入命令模式。我们在shell环境下输入启动vim命令,进入编辑器时,也是处于命令模式。在命令模式下,用户可以输入各种合法的vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的vi命令,则vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示...

2021-08-12 22:02:14 435

原创 关于 Const 的使用

在C语言中,const 修饰的变量依然被当做常量,在内存中依然有存储的空间,还可以通过指针间接修改内存空间的值 在C++中,C++把const看做常量,编译器会使用常数直接替换对值的引用C++中的const机制类似C语言中的宏,都是替换,但是C++的const是在编译阶段替换,C语言的宏是在预编译阶段替换。const修饰指针的三种情况:1、指向常量的指针:指针指向一个常量对象,目的是防止使用该指针来修改指向的值const int *p; /...

2021-10-07 16:13:34 140

原创 出现野指针的几种情况

什么是野指针: 野指针就是指针指向的位置是未知的(随机的、不正确的、未明确限制的)。野指针1:指针变量的值未被初始化 如果指针声明在全局变量区,那么未初始化的指针缺省为空。 如果指针声明在栈区,那么该指针将随意指向一个地址空间。void test() { int* ptr; //野指针,编译器报错 if (ptr != NULL) { }}野指针2:指针所指向的地址空间已经被free或delete 在堆上m...

2021-09-26 10:31:45 1169

原创 字节对齐的的概念

字节对齐为了使CPU能够对变量进行快速的访问,变量的起始地址应该具有某些特性,即所谓的“对齐”,比如4字节的int型,其起始地址应该位于4字节的边界上,即起始地址能够被4整除,也即“对齐”跟数据在内存中的位置有关。1、自然对齐:如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。2、非自然对齐比如在32位cpu下,假设一个整型变量的地址为0x00000004(为4的倍数),那它就是自然对齐的,而如果其地址为0x00000002(非4的倍数)则是非对齐的。 原则1:占用

2021-09-15 15:35:05 379

原创 指针与结构体的应用

指针强转为结构体,数组—>结构体成员赋值typedef struct Register {//寄存器 int register1; int register2; int register3; int register4;}tregister;void test() { int Array[] = { 1,0,1,1 }; tregister* p = (tregister*)Array; //将 数组指针 强转为 结构体型指针 .

2021-09-14 13:38:54 139

原创 指针与函数——函数指针与指针函数

1、函数指针:指向函数的指针变量int func(int a);int (*f)(int a);f = &func;函数指针应用场景:回调调用别人提供的 API 函数,称为Call;如果别人的库里面调用我们的函数,就叫Callback。//库函数qsort排序函数定义void qsort(void* base, //void*类型,代表原始数组 size_t nmenb, //size_t类型,代表数据数量 size_t size, //size_t类型,代

2021-09-14 13:24:16 106

原创 数组指针和指针数组

数组指针:指向一维数组的指针,也称为行指针int a[3][4];int (*p)[4]; //数组指针,指向含4个元素的一维数组p = a; //指向二维数组首地址,a[0]或者&a[0][0]p++; //指向行a[1][]指针数组:一个数组,数组的元素存储的是指针变量void test() { ​ int a[2][2] = { 1,2,3,4 }; //二维数组 int* p[2]; //一维数组存放2个指针变量 ...

2021-09-14 10:43:34 66

原创 函数传参的几种形式

函数传参的几种形式:调用类型 描述 传值调用 该方法把参数的实际值赋值给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响。 指针调用 该方法把参数的地址赋值给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。 引用调用 该方法把参数的引用赋值给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。 double cylinder(double r, d.

2021-09-14 09:58:07 231

原创 类对象作为类成员

当其他类对象作为本类中的成员时: 构造的顺序是:先调用其他类的构造,再调用本类的构造。 析构的顺序是:和构造的顺序是相反的。 成员的构造先后顺序是根据在类中的顺序决定的,跟构造方法中的初始化顺序无关。//手机类class Phone{public: string Phone_Name; Phone() { cout << "Phone 的无参构造函数调用" << endl; } Phone(string ...

2021-08-14 13:58:52 120

原创 静态库和动态库的创建及使用

1、静态链接静态链接:由链接器在链接时将库的内容加入到可执行程序中。2、动态链接动态链接:动态链接:连接器在链接时仅仅建立与所需库函数的之间的链接关系,在程序运行时才将所需资源调入可执行程序。静态链接、动态链接编译:gcc test.c -o testgcc -static test.c -o test_static一、静态库的制作及使用静态库可以认为是一些目标代码的集合,是在可执行程序运行前就已经加入到执行码中,成为执行程序的一部分。按照习惯,一般以“ .a ”做为

2021-08-12 23:49:36 452

原创 GCC编译器的使用

1、编译命令格式:C文件: gcc [options] file...C++: g++ [options] file...命令、选项和源文件之间使用空格分隔 一行命令中可以有零个、一个或多个选项 文件名可以包含文件的绝对路径,也可以使用相对路径 如果命令中不包含输出可执行文件的文件名,可执行文件的文件名会自动生成一个默认名,Linux平台为 a.out,Windows平台为 a.exe2、gcc 工作流程1、预处理mrz@mrz-virtual-machine:~/test$ g

2021-08-12 22:34:17 311

空空如也

空空如也

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

TA关注的人

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