自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 go build的时候出现了missing go.sum entry

记录一次go build的时候出现了missing go.sum entry的问题。解决:设置go env -w "GOFLAGS"="-mod=mod" 就可以了。或者每次在终端输入 go build -mod=mod,每个服务输入一次就可以了,但是你把go.sum删除的话,那么就需要重新输入。...

2021-04-21 16:54:14 4921

原创 分享一次M1芯片goland,debug失败的原因

因为goland buebug的时候,需要版本在1.13.0以上,于是我就重新安装golang版本。尝试过go1.16.3.darwin-amd64.pkg,go1.15.5.darwin-amd64.pkg,go1.14.2.darwin-amd64.pkg,go1.13.0.darwin-amd64.pkg,发现会出现如图所示的

2021-04-20 11:37:05 1856 10

原创 子网掩码形象理解

起因:主机A要和主机B通信,需要知道什么呢?主机A要知道主机B的IP地址,Mac地址等。那么如何求得主机B的IP地址呢? 这就要用到子网掩码的概念。作用:为了区分网络号和主机号。例子:加入有一个C类的网络号是192.168.115.7那么它的网络号就是前面的3个八进制位,也就是192.168.115,如何得到这一串数 字呢。我们想到了与运算,任何...

2020-03-17 18:49:04 271

原创 虚函数的小细节

1:什么是多态?基类的指针或者引用指向了这个继承这个基类的不同派生类的对象,通过该指针和引用派生类的同名覆盖方法。此时,基类指针指向那个派生类对象,就调用那个派生类方法。2:静态绑定?动态绑定?静态绑定:就是在编译的时候就已经确定了调用那个方法,即也就是通过call这个函数,在编译阶段已经确定好了要调用的方法。动态绑定:指的是在运行的时候才确定调用的方法,在编译的时候会使用call寄存器的方式,在...

2018-04-28 15:03:23 220

原创 “珊瑚海”里的虚函数

在c++里面,基类和继承类有三层的关系。1:重载,对重载来说,必须是相同的作用域,函数名相同,函数的参数列表不同。2:隐藏。所谓隐藏就是派生类把基类的同名的函数给隐藏了。在派生类对象调用此 函数的时候只能调用派生类的函数。基类的函数被隐藏了。3:覆盖。在基类的函数名前面加上virtual(即虚拟的)时,此函数就成了虚函数。如果在派生类里面,有同名,同参数的,同返回值时,此函数也就成了虚函数。这就是...

2018-04-24 17:10:08 230

原创 c++中const和引用

c++和c语言里面的const1:在C语言里面的const修饰的量是一个常变量,不能作为左值,但是可以通过泄露指针和引用去修改它,int a=10; int &p=a; 泄露了常量的引用。        但是 :int a=10;const int *p=&a;是正确的。因为a本来就是普通的变量,而通过常量*p不能改变它,但a可以自己改变自己,只是把对外的权限变小了,没影响什么。 ...

2018-04-14 19:48:16 439

原创 函数调用栈的使用

#include<stdio.h>a.cint sum(int a,int b);int main(){    int x=10;    int y=20;    ret=sum(s,y);    return 0;}b.cint sum(int a,int b){    int  temp;    temp=a+b;  returnt temp;}这就是调用的时候的栈的图片,一目了然...

2018-04-02 09:24:45 291

原创 inline函数和普通函数以及static与#define之间的“恩怨前仇”

在c++里面引入了inline函数,首先它和#define的区别:A:1:#define是在预编译的时候,进行的没有类型检查的单纯替换,而inline是在编译的时候进行的有类型检查的代码展开。2:#define没有调试的可能,如果你的代码里面有#define所替换的函数,那你只能祈祷不要出错。而inline在debug版本下是有调试的代码的,在release版本下没有调试的信息。B:!inline...

2018-04-01 19:17:23 421

原创 内存栈的分配和堆的分配 。printf函数的认识

我们拿一个简单的程序来看一看。在底层汇编之下函数的调用和内存的关系。#includeint add(int a,int b){ int c=0; c=a+b; return c;}void main(){ int a=10; int b=20; int z=0; z=add(a,b); printf("%d",z)    3:

2017-11-21 11:45:00 574

原创 static和extern不可缘木求鱼

在C语言里面static和extern对我们来说,是最熟悉的“陌生人”,对于这两个关键字,我们不能病急乱投医,不能缘木求鱼。必须从根本上认识他们。1:static如果在一个函数体里面的话,那么他就只定义一次,这我在“对全局变量的一点认识”里面已经说过了,就不再累赘了,在来说说他的第二层含义,就是如果在一个函数里面定义了static关键字,那么他的生存期就不再受函数的控制了,也就是说,stati

2017-11-08 21:02:20 446

原创 关于静态全局变量的一些想法

静态全局变量在初始化的时候只初始化一次,接着它就不在初始化了,这是怎么实现的那,我们通过反汇编代码来看看。#includeint fun(int a1){ static int a=a1; static int b=10; a++; return a;}void main(){ int a1,a; for(a1=10;a1>0;a1--) {

2017-11-06 18:53:45 297

原创 #define和typedef的比较以及#define与函数的不同

#define和typedef的比较1:typedef是声明新的类型名,使用新的类型名代替原有的类型名,   而且typedef是在编译的时候有用,所以会进行类型的检测。   而#define是在预编译的时候进行简单的宏替换,所以不会进行检测。2:对待指针时的不同   例如:     #define int*  Pi;Pi a,b;的意思是定义了一个指向整形的指针和第一了一

2017-11-02 15:08:36 308

原创 数组的“面具”

在谈到数组时, 我们总是将他们与指针混在一起。下面,我将谈谈数组的一些伪装。1:数组名总共在四个地方表现的不同。   一:在 sizeof(数组名)这个时候数组名代表的是整个数组的长度,即也就是总元素乘以每个元素占的空间大小。  二:在引用的状态下,int (&br)[10]=数组名,这是数组名也是代表了整个长度。 三:在数组名当形参的时候,他就退化成了一个指针。四:在其他的情

2017-11-02 14:34:36 320

原创 函数参数的不同和“夸张”的引用

函数的形参的可能性有,变量,指针,数组和引用。先来看变量。int fun(int a,int b)      例如此函数形参是两个变量,它们的存储地址和主调函数里的实参是不同的,所以{                            改变了形参的大小,并不会改变实参的大小。但为什么分配的内存不同,还可以把返回值带回?     int c;                这是因

2017-10-29 12:49:36 420

转载 C编译时各个阶段都在做什么

C语言编译主要分为四个阶段1.预处理   此阶段主要完成#符号后面的各项内容到源文件的替换,往往一些莫名其妙的错误都是出现在头文件中的,要在工程中注意积累一些错误知识。   (1)、#ifdef等内容,完成条件编译内容的替换   (2)、#include中内容,在当前目录或者指定目录,或者默认目录搜索头文件,并将头文件拷贝到源文件中。   (3)、#define的内容,替换de

2017-10-24 11:09:40 1172

原创 可见性和生存期的比较

1:可见性一般体现在编译过程,而生存期表现在执行过程。 如下:                #includevoid main(){ int x,y=10,dv=100; for(y=x;y>0;y=y-b*dv,dv=dv/10) {  int b=y/dv;  printf("%d",b); }}会出现的错误,这是因为在

2017-10-21 15:35:28 400

转载 EAX、ECX、EDX、EBX寄存器的作用

一般寄存器:AX、BX、CX、DXAX:累积暂存器,BX:基底暂存器,CX:计数暂存器,DX:资料暂存器索引暂存器:SI、DISI:来源索引暂存器,DI:目的索引暂存器堆叠、基底暂存器:SP、BPSP:堆叠指标暂存器,BP:基底指标暂存器EAX、ECX、EDX、EBX:為ax,bx,cx,dx的延伸,各為32位元ESI、EDI、ESP、EBP:為si,di,

2017-10-20 23:44:43 759 1

原创 数组和指针的区别和联系?

1:数组名代表一个静态地址,它指向数组元素的首地址,不可随意更改。  而指针变量指向一个变量或一块内存的地址单元。可以改变指向。2:在使用sizeof()中,sizeof(数组名)代表整个数组的所有字节的和,而sizeof(指针)的长度是由地址总线长度确定。3:数组在内存分配时是一连串的空间分配,而指针只是分配其指针大小,用到时,改变指向。4:当把数组当成函数参数传递时,这时,数组

2017-10-20 23:41:49 495

原创 循环的“妙用”

1:goto语句是无条件跳转语句,其用法是。goto语句后是标签(遵从标识符规定),直接跳跃至标签处,而且标签后面必须有冒号;2:break语句一般用于循环,switch之中,用于跳出循环,如果有多层循环的话,结束的只是最里面的循环。3:return语句一般是用于一个函数结束的时候,如果是主函数4:continue的跳转 A: 在for循环之中,一般continue是跳转在for的

2017-10-16 19:04:52 395

原创 sizeof PK strlen

区别1:sizeof是关键字,其后可跟变量,跟类型时一定要加括号.strlen是函数,相当于一个计数器,其参数是char *s.区别2:char a[]={shuipingzuo}            sizeof(a)  //  a代表的是整个数组的长度固值应该为12(后面有一个/0的结束符)            strlen(a)//其值为有效长度为11.

2017-10-11 23:05:27 257

原创 “调皮“的栈帧和与define的众多比较

1:程序主要分为四个区。代码区,数据区,堆区,栈区。主要来讲栈区,在栈区里一般分配1兆的空间,这一兆的空间被分割成一段有一段的栈帧,当函数递归调用(就是自己调用自己时),或者被别的函数调用时,就分配栈帧。注意:       void main()                                        例如此函数,在被主函数调用时,栈帧为其分配空间,形参a分配4字节,

2017-09-26 23:03:34 290

原创 "任性"的变量

1:           定义的变量的类型,就像一个人的手纹一样,今生今世,永远相随。并不会因为赋值或强制类型转换而改变。       2:           char 类型是一字节的整形,当赋予了字面值时,它以 ASCII所对应的整形值存在。      3:          有符号数若扩张字节是,前面扩展的是符号位,而无符号数扩展的是0.          例如:

2017-09-23 15:12:57 288

空空如也

空空如也

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

TA关注的人

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