自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

TROUBLE I AM IN

小白的日常生活

  • 博客(427)
  • 收藏
  • 关注

原创 gdb代码调试

gdb代码调试之前一篇博客文章目录gdb代码调试基本环境搭建开始调试调试时指定传入参数查看源码打断点查看某个变量的值调试代码修改变量的值总结B站视频基本环境搭建基本代码结构 main.c:#include <stdio.h>int main(int argc, char const *argv[]){ printf("输出的参数数量有:%d\n",argc); for (int i = 0; i < argc; i++) { pri

2021-08-22 11:42:23 394

原创 C语言静态库和动态库实操

C语言静态库和动态库文章目录C语言静态库和动态库静态库制作与使用制作生成.o文件打包.o文件静态库使用动态库制作与使用生成.o文件打包.o文件使用动态库配置方式1:修改 /etc/ld.so.conf方式2:修改环境变量 PATH总结之前一直在看文案的解释,没有实操过,所以一直不知道到底是啥意思,直到今天恰巧搞到了一个视频,所以这里记录一下。静态库制作与使用制作代码基础结构:.├── include│   └── calcute.h├── lib├── main.c

2021-08-19 22:27:55 432

原创 VSCode搭建Linux Kernel源码阅读环境

VSCode搭建Linux Kernel源码阅读环境参考博客首先,我就是想看看源码而已,暂时不需要一个正在运行的Linux环境,所以我就没有什么虚拟机,SSH之类的那么麻烦的东西,我现在单纯就是想当我看到一个结构体的时候,编译器能帮我找找在哪里定义的而已。再来就是我的环境是mac,所以安装软件用的是brew。安装global这个就简单了:brew install global。然后使用:which globalwhich gtags来看看有没有安装成功,并记录下对应的路径,我的路径是:

2021-08-05 14:04:41 4436

原创 preg_match_all() 和 preg_match()

preg_match_all()这个函数乍一看很好用,问题是你有想过其中的数据哪来?比如下面的代码:<?php$preg="(\w)(\?)";$text="1v1?1?v?1";$result=[];preg_match_all("@{$preg}@",$text,$result);其中的返回结果如下:array ( 0 => array ( 0 => '1?', 1 => '1?', 2 => 'v?', ),

2021-07-30 16:14:49 135

原创 Makefile总结

Makefile总结makefile 1-4makefile基础命令格式,也就是 目标,依赖,命令这种,还有伪目标变量,这个很重要,还有一个内容是关于变量赋值的内置规则,也就是自动推导include关键字make介绍make工作模式重新编译依据通配符文件搜索和文件选择makefile 5,6静态模式,本质上就是采用通配符来设定一些目标的编译过程多目标命令相关的内容,功能上有是否在命令行显示所执行的命令命令之间的前后关联是否执行命令,命令出错后是否继续执

2021-07-26 16:58:35 121

原创 Makefile教程:11-14

Makefile教程:11-14Makefile11:make参数makefile教程11就是指定make运行时,可以带上的参数。下面就是根据作用来分类,具体的就需要到时候去查了。指定makefile的文件指定文件执行的路径前缀展示所有变量执行相关的忽略文件更新时间,重新执行依赖忽视错误,继续执行 & 取消忽视错误,继续执行重新执行时,忽略一些发生修改的文件禁止自动推导不输出运行的命令限制同时启动的命令数量调试仅展示命令,不执行展示是否有目标发生更新根据指

2021-07-24 22:42:09 174

原创 Makefile教程 7-10

Makefile教程 7-9教程整理部分1教程整理部分2Makefile教程7:变量博客地址这一章节的内容,基本在makefile教程:变量部分都介绍过了。Makefile教程8:变量,条件判断makefile8环境变量这个本意很简单,就是可以读取操作系统的环境变量,比如:.PHONY:debug: env=1;export env;echo $(env);的这个用法见makefile之命令之间的关联这里就是定义了一个变量env,并且将其设置为环境变量:export env,

2021-07-18 16:47:30 303

原创 Makefile教程整理:5,6

Makefile教程整理Makefile上部一部分的教程为了防止杠精,这里再重申一下,本博客的内容都是来自陈皓大神的博客,我只是记录下自己的学习笔记。Makefile教程5:静态模式,多目标,自动依赖Makefile教程5静态模式在开始前介绍两个值:$@代表所有的目标$<代表所有的依赖文件看一个最简单的例子,文件结构如下:.├── functions.c├── main.c└── makefile其中functions.c:int addSum(int a,int

2021-07-07 22:17:57 242 1

原创 makefile变量赋值

makefile变量赋值就是:=,:=,?=,+=这几个的介绍。参考博客下面的内容摘自上面的博客。= 是最基本的赋值:= 获取变量当前的值?= 是如果没有被赋值过就赋予等号后面的值+= 是添加等号后面的值其中首先要介绍的就是:=,上面获取当前的值,这是我修改的,因为我觉得它的描述不准确。博客中给了一个例子: x = foo y = $(x) bar x = xyz问y的值是多少,答案是:xyz bar,就说是说是以第二个值为准。而对于:=则是: x = foo y:=

2021-07-04 22:17:06 207

原创 Makefile教程整理1-4

Makefile教程整理1-4下面的教程都来自于陈皓大神的博客。想要写Makefile,就需要gcc的相关知识。Makefile教程1:基础介绍Makefile教程1基础教程,就是介绍Makefile的基本概念和使用,这里拿一个最简单的例子说明:一个main.c#include<stdio.h>int main(int argc, char const *argv[]){ printf("hello world\n"); return 0;}传统gcc编

2021-06-20 17:49:23 184

原创 C语言复习之:再论函数指针

C语言复习之:再论函数指针函数指针查看方式前面有介绍函数指针的基本定义,这里会更加复杂一点。参考B站视频,其中大约在视频28分钟的地方开始讲这一块的内容。这里先贴出来几个视频中的例子:int fpt(int);int *fpt2(int);int (*fpt3)(int);int (*fpt4[10])(int);int **ftp5[10](int);先来看第一个例子:int fpt(int);,这个很简单,我们定义了一个函数变量。再来看第二个:int *fpt2(int

2021-06-13 11:38:26 530 6

原创 C语言复习之:数组

C语言复习之:数组数组与指针这部分在之前讲过一次,这次算是复习参考B站视频数组变量是数组第一个元素的首地址:#include <stdio.h>int main(int argc, char const *argv[]){ int a[10]; printf("%s\n",a==&a[0]?"yes":"no"); return 0;}输出结果:yes数组变量是一个常量:正常版本:#include <stdio.h>int ma

2021-06-13 09:06:07 204

原创 C语言复习之:c文件和h文件

C语言复习之:c文件和h文件在开始讲这个之前,先要弄懂extern这个关键字。例子1:include 和 extern这个是一个func.c:int a=1;然后这是一个main.c:#include <stdio.h>#include "func.c"int main(int argc, char const *argv[]){ printf("a is %d\n",a); return 0;}编译:gcc main.c -o main运行:./ma

2021-06-07 23:00:58 472

原创 C语言复习:32个关键字和运算符的15个优先级

C语言复习:32个关键字和运算符的15个优先级C语言解析是从左边开始的,比如:#include <stdio.h>int main(int argc, char const *argv[]){ int b=0; int a=b++; printf("a is %d\n", a); printf("b is %d\n",b); return 0;}输出结果:a is 0b is 1这里从a开始从左往右看,int a=b,是正确的式子,于是解析完成,然后是b++。

2021-06-07 22:32:35 580 5

原创 gcc 和 gdb

gcc 和 gdb参考视频gcc是编译器,用于编译c,c++,java等多种语言,生成最后的可执行文件。gdb是程序调试器。两者都是由GNU推出的。gcc部分gcc的特性:交叉平台编译,就是可以在当前的CPU上编译其他CPU平台上运行的软件,比如,你可以使用Unix的操作系统编译在X86 CPU上运行的代码。编译过程以及其中的文件后缀约定为:预处理编译汇编链接过程文件后缀说明开始编译前.cC语言源代码文件.a由目标文件构成的档案库文件

2021-05-22 15:54:27 1062

原创 《庖丁解牛Linux内核》笔记之:调用堆栈

《庖丁解牛Linux内核》笔记之:调用堆栈参考视频基础知识介绍在基础知识里讲过在使用cal调用函数时,会在之前的堆栈上创建一个新的堆栈,这里想讨论的就是如何实现调用函数时的参数传递。下面的代码我是在自己的mac电脑上获取到的。这里以一个超级简单的代码为例子:int add(int a,int b,int c,int d){ int e=1; return a+b+c+d+e;}int main() { int a,b,c,d,e; a=1; b=2;

2021-05-16 19:22:52 250

原创 《庖丁解牛Linux内核》笔记之:汇编基础

《庖丁解牛Linux内核》笔记之:汇编基础参考视频下面的说法都来自x86CPU寄存器。值的不同表示方法%eax类似这种就是直接操作该寄存器,效果类似于C语言中的指针:*和&。(%eax)这里代表()中的内容是一块地址,而(%eax)代表直接读取其中的地址对应的值。$123这里的代表的是具体的值,即十进制的123。123这种只有一个数值的,代表其本身是一个地址。常见寄存器eax:累加寄存器,主要用来临时存放运算结果ebx:基地址寄存器,顾名思义,这里存储的就是一个

2021-05-16 13:28:38 312

原创 Linux内核基础笔记:基础知识

以下笔记内容都来自《Linux内核设计与实现》。Linux内核基础笔记:基础知识内核代码下载地址:github官网内核代码结构:内核代码特性1 无libc库 或 无头文件在源码中出现的类似:#include <linux/string.h>的代码,指的是include下的文件夹linux中的string.h,一般的头文件都在该目录下。然后一些常用的C语言标准库中的函数,就在lib中,比如字符串的操作就在lib/string.c中。简单来说两者的关系就是,lib提供函数,

2021-05-13 23:24:40 204

原创 《大话数据结构》之栈

栈下面会出现一些我在《大话数据结构》之线性表中定义的数据种类,在全部完成之后,我会整理好发到我的github上去。这个就是在一端进,同一端出的那种。顺序存储实现栈栈可以用线性表来存储。比如顺序存储来实现栈:这里有一个存储头部元素的数组下标在哪里的值:top。数据结构就是:typedef struct { SqlList sqlList; int top;} SqlListStack;对应的出栈和入栈操作是:/** * 插入元素 * @param sqlListSt

2021-05-04 11:55:58 174

原创 《大话数据结构》之线性表总结

线性表特性对比基础知识介绍顺序存储和单链表存储空间从这个角度说,顺序存储需要提前申请好对应的存储空间,而链表则是可以采用malloc来申请内存,然后存储新的内容。查找效率顺序存储的查找效率就是随查随用,就是O(1)。链表最坏的情况就是遍历整条链,所以是O(n)更新效率顺序存储更新的效率就比较麻烦了,需要移动对应的位置后面的所有元素,所以是O(n),而链表就快多了,就是O(1)。静态存储存储空间与顺序存储是一样的,都需要提前申请好这块的内存。查找效率跟顺序存储是一样的。更新效率这

2021-04-26 22:54:08 133

原创 《大话数据结构》之线性表

链表顺序存储简单来说就是用数组存储数据。链式存储这个简单来说就是存储下一个地址,比如《海贼王》中的历史时板,每块板子上的信息都是不足的,如果你想要找到最终的答案,需要从上一块石板开始到下一块石板。或者再举个例子,比如这是个游戏任务,一个游戏任务会被拆分成多个小任务,在每个小任务的部分,会要求你完成该部分的任务,然后再给出你下一条任务的提示。静态存储这个回归到最开始的顺序存储,只不过原先的数组中,每个值不仅存储当前的值,还存储下一个值的数组下标。循环链表这个要说也很简单,就是在在链表末

2021-04-26 22:37:23 446 1

原创 C语言预处理器和C库

C语言预处理器和C库C语言编译前工作下面的步骤发生在程序交给预处理器前,由编译器处理。字符映射,即将代码中出现的字符映射到源字符集。啥叫源字符集呢?就是程序理解的字符集。搜索\以及后面有个换行符的代码,将其整合成一行,比如:printf("hello \ world\n");会被转换成:printf("hello world\n");将代码文本中的:序列空白序列注视序列替换成一个空格,简单来说就是将代码中的非代码部分去掉。#define详细内容首先

2021-04-18 23:41:04 435 10

原创 C语言结构体,联合,枚举类型,typedef

C语言结构体,联合,枚举类型,typedef结构体直接看代码:#include "stdio.h"#define MAX_TITLE 30#define MAX_AUTHOR 30#define MAX_BOOKS 10struct book{ char title[MAX_TITLE]; char author[MAX_AUTHOR]; float price;};struct volume{ // 结构体的数组 struct book boo

2021-04-17 16:09:47 196

原创 Ubuntu 下配置 Typora 图片上传到 smms

Ubuntu 下配置 Typora 图片上传到 smms首先在这里安装 PicGo[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c9BiOPoj-1618560989356)(https://i.imgur.com/WL8vTYG.png]安装完成后,需要到:https://sm.ms/ 这个网站去注册一个免费账号,然后注册成功后就可以获得一个token。在你当前用户的目录下,这里以我的为例:/home/你当前用户的目录/.picgo/config.json中配置成下

2021-04-16 16:20:36 216

原创 C语言文件基本操作

C语言文件基本操作基本例子:#include "stdio.h"int main(){ // 获取文件地址指针,或者叫句柄 FILE *fileHandler= fopen("这里写一个文件的绝对路径","r"); int ch; // 读取内容 while ((ch= getc(fileHandler))!=EOF){ // 输出内容到标准输出 putc(ch,stdout); } // 释放句柄 fc

2021-04-12 22:31:25 178

原创 C语言关键字:const / volatile / restrict

C语言关键字:const / volatile / restrictconst 与指针这一块很有意思,就是不同的写法限定的内容是不一致的,首先我们知道加上const后该变量就会变成只读的,但是对于指针,是限制该指针指向新的地址,还是限定指针所指向的内容变成只读的:const float * pf;float const * pf2;这两种写法是一样的。这种方式就是限定无法通过pf修改所指向的地址的内容:#include "stdio.h"int main(){ float cons

2021-04-12 16:05:15 174

原创 C语言分配内存

C语言分配内存首先说基础:malloc:申请内存参数:申请内存所需要的字节数返回参数:void*类型的指针,如果申请内存失败,就会返回空指针free:释放内存参数:申请到的地址,即上面返回的指针返回参数:无calloc:作用和 malloc 类似,就是参数不同下面就是借用这个内存分配演示一下生成动态数组:#include "stdio.h"#include "stdlib.h"int main(){ int arrayLength; if (scan

2021-04-12 11:35:59 155

原创 C语言存储类别、链接和内存管理:存储期和存储类别

C语言存储类别、链接和内存管理基础概念,作用域和链接存储期啥叫存储期呢?简单来说就是当前变量什么时候被自动销毁,内存被回收。比如:#include "stdio.h"void debug(void );int main(int argc,char* argv[]) { // 调用 debug()函数,其中的变量 int data=1;被分配内存 debug(); // 调用结束,debug() 中的 int data=1; 被自动销毁 // 再次被调用,则再

2021-04-10 16:21:08 209 3

原创 C语言存储类别、链接和内存管理:基础概念,作用域和链接种类

C语言存储类别、链接和内存管理基础概念首先就是介绍一些基本概念,然后就是分别扩展这些概念的属性:对象:内存中一个存储单位存储的具体的值标识符 / 左值:就是代码中代表内存中对象的值,比如:int sign=1;中的sign就是一个标识符,sign+1就不是一个标识符,因为它不代表内存中的任何一个值。但是结合到指针就会再复杂一点:char address[]="hello world";这里*(address+1)也可以算是一个标识符,因为其也代表一个内存地址。标识符有一个特性就是

2021-04-09 22:07:39 207

原创 C语言与字符串

C语言与字符串字符串本质C语言的字符串本质上就是字符的数组。#include "stdio.h"int main() { // todo 这里特意加上 const 是为了说明这个值是不可修改的 // 更加通俗的理解就是开辟了一块只读的存储空间专门存储字符串:"hello world",然后将首地址赋值给 constString 这个指针 const char* constString="hello world"; // 这个值则是开辟了一块连续的地址空间,用来存储

2021-04-05 14:20:38 136

原创 C语言之预处理

C语言之预处理这个本来没啥讲的,就是我发现了一个很有意思的东西:#include "stdio.h"#define PI 3#define S PI*r*rint main() { int r=3; printf("%d\n",S); return 0;}注意这里看到定义预处理的时候:#define S PI*r*r,有一个r的值是没有定义的,但是这样是没有问题的,真的有意思。至于为什么可以这么写,是因为这里只是预处理,在真正编译的时候,会被替换成具体的值,即会

2021-04-04 21:00:20 146

原创 C语言之函数指针

C语言之函数指针参考B站视频:小甲鱼C语言视频教程在开始前,问一个问题,函数是否是类似int a=1;这样的变量?答案如果是是的。那么是否可以定义一个函数类型的变量呢?答案如果也是是的,那么怎么定义呢?int bigger(int,int);类似这样,就定义了一个函数类型的变量,其接受两个int类型的输入作为参数。具体看下面的例子:#include "stdio.h"int main() { int bigger(int,int); int smaller(int,in

2021-04-04 14:26:54 132

原创 C语言中的二维数组与指针

C语言中的二维数组与指针这一块是很烦,但是理顺了之后就会简单很多。数组存储本质首先看下面一段代码:int singleArray[4]={1,2,3,4};其在内存中的就是这样的存储形式,其中地址1代表的就是singleArray,其本质就是一个指针值,所以你采用*singleArray就能获得1。或者你还有可能见到这种写法*(singleArray+1),这样就能获得数组第二个的值,即2,这是因为地址2和地址3的值是连续的,两者之间的差值是1,为什么是1呢?这个需要结合数电的知识解释,这里

2021-04-03 16:02:03 446

原创 8 字符输入输出和输入验证

缓存区缓冲区即输入到输出之间,输入会被暂存在这里,直到满足一定条件,输出内容才从缓冲区到输出。具体的条件即为下面两种:#mermaid-svg-7b5ihIkyrP4xuB7K .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-7b5ihIkyrP4xuB7K .label text{fill:#333}#m

2021-03-23 22:55:23 297

转载 mac os big sur 安装 PHP 拓展:XDebug

mac os big sur 安装 PHP 拓展:XDebug参考博客在安装过程中,会出现:fatal error: 'php.h' file not found,然后之前的版本只需要关闭csrutil,具体可以参考我之前的一篇博客,但是在升级到Big Sur之后就没有用了,然后我找到另一种解决方式,就是上面那篇参考博客。这里我复述一下,防止博客它的博客地址失效。解决方法简单来说就是我们重新定义一个phpize和php-config,然后在编译的时候用我们重新定义的这两个文件。环境检查运行:x

2021-03-19 16:54:00 596 3

原创 《离散数学及其应用》章节总结与github地址

github代码仓库地址《离散数学及其应用》暂时结束《离散数学及其应用》学习笔记。这里的所有的markdown语法都是我在Mac的Typora上能完美显示的,如果有latex显示不对的地方,可能是软件原因。其中Code部分的代码,有的是我没有写完,有的可能是有问题的,我没有时间一一整理了,我的运行环境是php 7.3。我的CSDN博客地址,这里也有一些备份文件,只是因为latex的支持有问题,所以我特意在这里备份一份数据(因为我知道如果存电脑上,肯定会因为我重装系统把数据弄没掉)。最后祝贺自己

2021-03-14 14:26:51 1141

原创 3 数据和C

3 数据和Cgraph LR start(数据类型) ---> intIndex(整数) & floatIndex(浮点数) & charIndex(字符型); intIndex ---> int; floatIndex ---> float & doubler; charIndex ---> char;graph LR start(修饰符) ---> short & long & l(long long) &amp

2021-03-13 21:14:12 148

翻译 使用Mermaid在Markdown构建流程图

使用Mermaid在Markdown构建流程图下面的内容都是在Mac的Markdown软件:Typora上能实现效果。译文原址1 方向#mermaid-svg-Fcmh8QMLqtLP6ylx .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-Fcmh8QMLqtLP6ylx .label text{fil

2021-03-13 13:40:33 465

原创 13.1 语言和文法

13.1 语言和文法这里刚开始名词有点多,一定要先理解这些名词才能往下看。我们逐步拆分下面的定义啊:句子名词短语+动词短语冠词+形容词+名词+动词+副词 / 冠词+形容词+名词=名词短语,动词+副词=动词短语the + 形容词+名词+动词+副词 / the 是冠词的其中一种the + beautiful +名词+动词+副词the + beautiful+lady+speak+loudly.然后我们知道,仅仅以英文来说,是由24个英文字母+符号组成的,我们先定义一个概念:V,其包含所有组

2021-03-08 23:27:57 275 1

原创 12.4 电路的极小化

12.4 电路的极小化在之前构建布尔函数部分,我们知道根据真值表我们可以写出所有的布尔函数,但是问题是这些布尔函数在电路实现上并不一定是最优价,比如:F(x,y,z)=(x+y)z‾=xyz‾+xy‾z‾+x‾yz‾F(x,y,z)=(x+y)\overline{z}=xy\overline{z}+x\overline{y}\overline{z}+\overline{x}y\overline{z}F(x,y,z)=(x+y)z=xyz+xy​z+xyz在拆开来之前,就只需要一个+,一个-,一个.

2021-03-07 22:02:09 207

空空如也

空空如也

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

TA关注的人

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