夯实基础
夯实基础
lucky tiger
要一直前进,一直静下心来学习。
展开
-
力扣7. 整数反转(指针引用形参、指针常量与长指针区别)
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321class Solution {public: int reverse(int x) { int ans = 0; wh..原创 2021-05-06 16:09:21 · 128 阅读 · 0 评论 -
stringstream流输入输出(C++引入的概念)
1、之前刷leetcode发现这个函数对于对单词的计数很好用,总是忘记怎么用,自己总结记录一下。2、头文件 #include <sstream>3、<sstream> 定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作,也就是in out 。5、流输出举例#include <iostream>#include <sstream>using name.原创 2021-01-16 21:54:58 · 2009 阅读 · 0 评论 -
union与大小端
union是C语言中的一个关键字,数据在内存中的操作是使用补码进行加减操作。int类型占4个字节长度,即32位,char类型占1个字节长度,即8位。80X86一般意味着小端存储和32位操作系统union中的所有数据成员共用一个空间,同一时间只能存储其中的一个数据成员,并且所有的数据成员有相同的起始地址。例如:union U{ double d; int i; char c; float f;}u;它的大小是其中最大长度double类型的大小..原创 2020-09-23 22:26:42 · 776 阅读 · 0 评论 -
Static全局变量与普通的全局变量有什么区别?static函数与普通函数有什么区别?
Static全局变量与普通的全局变量有什么区别?答: 全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个原文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。 由于静态全局变量的作用域限于一个源文件内,只能为该原创 2020-09-17 19:42:41 · 2026 阅读 · 0 评论 -
动态库和静态库知识点总结
1、最本质区别是否被编译进程序内部静态(函数)库一般扩展名为(linux下是.a) (windows下是.lib),这类的函数库通常扩展名为libxxx.a或xxx.lib静态库命名格式:lib + "库名称”+ .a(后缀) 例:libadd.a就是一个叫add的静态库这类库在编译的时候会直接整合到目标程序中,所以利用静态函数库编译成的文件会比较大,这类函数库最大的优点就是编译成功的可执行文件可以独立运行,而不再需要向外部要求读取函数库的内容;但是从升级难易度来看明显没有优势,如果..原创 2020-09-10 20:55:34 · 217 阅读 · 0 评论 -
指针函数和函数指针
1、指针函数返回指针的函数,本质是一个函数,只不过返回值是一个指针int *fun(int x,int y);int* fun(int x,int y);int * fun(int x,int y);#include <iostream>#include <algorithm>using namespace std;struct Data{ int a; int b;};Data *f(int a,int b){ Data * dat原创 2020-09-10 20:03:05 · 99 阅读 · 0 评论 -
内存泄漏
1、为什么会内存泄漏内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。当一个对象已经不需要再使用本该被回收时,另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏。在C语言中,从变量存在的时间生命周期角度上,把变量分为静态存储变量和动态存储变量两类。静态存储变量是指在程序运行期间分配了固定存储空间的变量而动态存储变量原创 2020-09-09 20:21:14 · 381 阅读 · 0 评论 -
野指针和悬空指针
概念:野指针指向了一块随机内存空间,不受程序控制。如指针指向已经被删除的对象或者指向一块没有访问权限的内存空间,之后如果对其再解引用的话,就会出现问题。1、指针定义时未被初始化:指针在被定义的时候,如果程序不对其进行初始化的话,它会指向随机区域,因为任何指针变量(除了static修饰的指针变量)在被定义的时候是不会被置空的,它的默认值是随机的。2、指针被释放时没有被置空:我们在用mallo...原创 2020-04-23 13:59:50 · 196 阅读 · 0 评论 -
volatile
volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。声明时语法:int volatile vInt; 当要求使用 volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。不加volatile 编译器优化做法是,由于编译器发现两次从 i读数据的代原创 2020-07-25 15:32:33 · 120 阅读 · 0 评论 -
strcpy()/strcmp()/strcat()
1、strcpy()C 库函数 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。在vs上看不出来编译器要用c的编译器用gcc将长字符串赋值给短字符串是不允许的,会造成内存溢出,访问不该访问的地方,造成无法预料的结果。因此,复制之前,确保目的字符串 能够 保存 源字符串。2、strcmpC ..原创 2020-07-22 20:31:40 · 143 阅读 · 0 评论 -
GDB小技巧disas /m main以及disas /s main(后面这个更好用将源程序和汇编指令映射起来)
1、#include <stdio.h>void strcats(char *s, char *t);int main(){ char s1[] = "Hello, "; char t1[] = "world!"; strcats(s1, t1); return 0;}void strcats(char *s, char *t){ while (*s) s++; while (*s++ = *t++);}g原创 2020-07-22 20:29:45 · 2800 阅读 · 2 评论 -
strlen 与 sizeof 的区别/引用
https://blog.csdn.net/zhengqijun_/article/details/51815081?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.none原创 2020-07-22 10:10:39 · 80 阅读 · 0 评论 -
静态非静态,this指针
1、静态成员函数和非静态成员函数的区别使用static修饰的静态方法是属于整个类的类方法,它在内存中的代码段会随类的定义而被分配和装载;而非静态方法是属于具体对象的方法,当这个对 象创建时,在对象的内存中会拥有此方法的专用代码段。在引用静态方法时,可以使用对象名加前缀,也可以使用类名加前缀。eg. classA 实例化了一个对象objectA,classA中定义了一个静态方法:run( ). 则可使用 classA.run( ) 或者objectA.run( )来执行。非静态方法既可以访问静态数据原创 2020-07-17 10:04:25 · 465 阅读 · 0 评论 -
pair make_pair
mp.insert(pair<int,int>(1,1));mp.insert(make_pair(2,1));make_pair就是可以不写类型,但是pair<int,float>(1,1.1)make_pair(2,1.1)是不同的,第一个就是float,而第2个会自己匹配成double。// make_pair example#include <utility> // std::pair#include <iostre.原创 2020-07-15 15:52:15 · 118 阅读 · 0 评论 -
delete delete[]区别
1、对于简单的数据类型来说int char string使用new分配后的不管是数组还是非数组形式的内存空间 delete delete[]都可以原因:分配简单内存,内存大小已经确定,系统可以记忆并管理对于class类:A * a = new A[10];delete a;仅仅释放了a指针指向全部的内存空间,但是只调用了a[0]对象的析构函数 ,a[1]到a[9]内存空间不能释放造成内存泄漏;delete [] a; 多了[]就 会释放a指针指向的全部内存空间,还会逐一调用每个对象的原创 2020-07-15 15:19:59 · 210 阅读 · 0 评论 -
类和结构体的区别
结构体(sturct)是一种值类型,而类(class)是引用类型。区别在于复制方式,值类型的数据是值赋值,引用类型的数据是引用复制。结构体使用栈存储(Stack Allocation),而类使用堆存储(Heap Allocation)。 栈的空间相对较小.但是存储在栈中的数据访问效率相对较高。 堆的空间相对较大.但是存储在堆中的数据的访问效率相对较低结构体使用完之后就自动解除内存分配,类实例有垃圾回收机制来保证内存的回收处理如何选择结构体还是类1. 堆栈的空间有限,对于.转载 2020-07-13 09:11:33 · 360 阅读 · 0 评论 -
从汇编层面看函数调用的实现原理
https://www.cnblogs.com/abozhang/p/10788396.html原创 2020-07-13 09:08:58 · 169 阅读 · 0 评论 -
c语言问题 局部变量能不能和全局变量重名?
能,局部会屏蔽全bai局。要用全局变量,需要使用 "::" ;局部du变量可以与全局变zhi量同名,在函数内dao引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。局部会屏蔽全局#include <stdexcept>using namespace std;int c = 0;int main(){ static in原创 2020-07-09 10:58:09 · 1799 阅读 · 0 评论 -
为什么有了MAC地址还要有IP地址
https://blog.csdn.net/Cjx_9421/article/details/86708609原创 2020-07-08 08:34:57 · 409 阅读 · 0 评论 -
什么是哈希表?什么又是哈希冲突?哈希冲突的解决方法?
哈希表是基于数组的一种存储方式.它主要由哈希函数和数组构成。当要存储一个数据的时候,首先用一个函数计算数据的地址,然后再将数据存进指定地址位置的数组里面。这个函数就是哈希函数,而这个数组就是哈希表。②哈希冲突是指哈希函数算出来的地址被别的元素占用了,也就是,这个位置有人了。好的哈希函数会尽量避免哈希冲突。那么发生了哈希冲突,要怎么解决呢?解决哈希冲突有以下几种方法:开放定址法:这种方法也称再散列法,其基本思想是:当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地原创 2020-07-07 21:29:05 · 1856 阅读 · 0 评论 -
类里面怎么定义const常量 C++
1、类里面怎么定义const常量 C++方法二:(正确,有缺陷)使用enum;class Test{ enum { size = 100}; int array[size];//……};使用enum不会占用对象中的存储空间的,枚举常量在编译的时候被全部求值。缺点:假如定义一个非整型的常量该如何?enum无法完成此项操作,同时丧失了枚举本来的作用。方法三:(正确,最好)使用静态常量;class Test{ static ..原创 2020-07-07 16:15:07 · 1543 阅读 · 0 评论 -
C++中free()与delete的区别
1、new/delete是C++的操作符,而malloc/free是C中的函数。2、new做两件事,一是分配内存,二是调用类的构造函数;同样,delete会调用类的析构函数和释放内存。而malloc和free只是分配和释放内存。3、new建立的是一个对象,而malloc分配的是一块内存;new建立的对象可以用成员函数访问,不要直接访问它的地址空间;malloc分配的是一块内存区域,用指针访问,可以在里面移动指针;new出来的指针是带有类型信息的,而malloc返回的是void指针。4、new/d原创 2020-07-07 16:01:58 · 665 阅读 · 0 评论 -
tcp和udp的区别?
tcp和udp的区别? (基于连接vs无连接)tcp是面向连接的(三次握手;四次挥手);udp不是面向连接的 (重量级vs轻量级)tcp是一个重量级的协议;udp则是轻量级的协议。一个tcp数据报的报头大小最少20字节,udp数据报的包头固定8个字节 (可靠性)tcp交付保证:如果消息在传输中丢失,那么它将重发;udp没有交付保证,一个数据包在运输过程中可能丢失。 (有序性)消息到达网络的另一端可能是无序的,tcp协议将为你拍好序。Udp不提供任何有序性的保证。 (速度)tcp慢,适合传输大量数转载 2020-07-07 15:44:12 · 182 阅读 · 0 评论 -
TCP/IP的层数 作用
1、1. 应用层 2.传输层 3.网络层 4.网络接口层 1、应用层 TCP/IP协议族在这一层面有着很多协议来支持不同的应用,许多大家所熟悉的基于Internet的应用的实现就离不开这些协议。如我们进行万维网(WWW)访问用到了HTTP协议、文件传输用FTP协议、电子邮件发送用SMTP、域名的解析用DNS协议、远程登录用Telnet协议等等,都是属于TCP/IP应用层的;就用户而言,看到的是由一个个软件所构筑的大多为图形化的操作界面,而实际后台运行的便是上述协议。(FTP、SMTP.原创 2020-07-07 15:34:08 · 656 阅读 · 0 评论 -
常见 TCP 拥塞控制(避免)
TCP控制拥塞的四种算法:慢开始,拥塞避免,快重传,快恢复RWND(receiver window)接收端会维护一个接收的buffer的大小,ACK的时候会告诉发送方拥塞窗口cwnd(congestion window)慢开始门限ssthresh状态变量一:慢开始算法和拥塞避免算法发送方会维持一个拥塞窗口,刚开始的拥塞窗口和发送窗口相等,一般开始均设置1,然后我们每收到一个确认,就让拥塞窗口大小变为原来的两倍,接着发送分组也是原来的两倍,以此类推,当窗口值等于16(慢开始门限),然.原创 2020-07-07 15:11:22 · 5230 阅读 · 0 评论 -
C/C++常用头文件及函数汇总
C/C++头文件一览C#include <assert.h> //设定插入点#include <ctype.h> //字符处理#include <errno.h> //定义错误码#include <float.h> //浮点数处理#include <iso646.h> //对应各种运算符的宏#include <limits.h> //定义各种数据类型最值的常量#include <locale.h&...转载 2020-07-07 09:49:21 · 816 阅读 · 0 评论 -
堆栈溢出内存不足指针置NULL
题目:堆栈溢出一般是由什么原因导致的?答:1.函数调用层次太深。函数递归调用时,系统要在栈中不断保存函数调用时的现场和产生的变量,如果递归调用太深,就会造成栈溢出,这时递归无法返回。再有,当函数调用层次过深时也可能导致栈无法容纳这些调用的返回地址而造成栈溢出。2.动态申请空间使用之后没有释放。由于C语言中没有垃圾资源自动回收机制,因此,需要程序主动释放已经不再使用的动态地址空间。申请的动态空间使用的是堆空间,动态空间使用不会造成堆溢出。3.数组访问越界。C语言没有提供数组下标越界检查,如果在程序中出现原创 2020-07-07 09:47:21 · 502 阅读 · 0 评论 -
http协议的状态码:404等常见网页错误代码
https://blog.csdn.net/qq_29837161/article/details/97410378原创 2020-07-07 09:35:32 · 319 阅读 · 0 评论 -
全局区/线程栈和进程栈的关系
说到全局/静态区有data段和bss段,面试官问data段和bss段的区别:全局区:我们自底向上的方式进行讲解:1. 代码段:主要是程序的代码以及编译时静态链接进来的库。这段内存大小在程序运行之前就已经确定,而且是只读,可能存在一些常量,比如字符串常量。2. 数据段:分为data和bss两个段,表现为静态内存段,data段存放已初始化的全局变量(静态内存分配的变量和初始化全局变量)。bss段存放未初始化的全局变量,在内存中bss段被清零。3. 堆 段:用于程序动态内存分配和管理,如何分配原创 2020-07-06 15:07:44 · 496 阅读 · 0 评论 -
智能指针
1、https://baijiahao.baidu.com/s?id=1651637104708229292&wfr=spider&for=pchttps://www.cnblogs.com/XiaoXiaoShuai-/p/11597709.html原创 2020-07-06 14:26:31 · 91 阅读 · 0 评论 -
重载 覆盖 重写
1、覆盖是子类和父类之间的关系,是垂直关系。2、重载是同一个类中方法之间的累加,是水平关系。重载(overloaded)和多态关系不大,真正和多态相关的是覆盖。重载与覆盖的区别如下:一、定义不同:覆盖意思是指遮盖、掩盖,也指zhi空中某点发出的电波笼罩下方一定范围的地面。重载,简单说就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。二、关系不同1、覆盖是子类和父类之间的关系,是垂直关系;2重载是.原创 2020-06-30 17:21:16 · 212 阅读 · 0 评论 -
new和malloc的区别
在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区;在C中,C内存区分为堆、栈、全局/静态存储区、常量存储区;new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持c。原来如此:new 是在自由存储区上的C++特有new和malloc的区别a.属性 new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持c。b.参数 使用new操作符申请内存分配时无须指原创 2020-06-30 17:14:06 · 78 阅读 · 0 评论 -
面试问题总结:
1.讲一下类的private和protected的区别2、gdb常用命令有什么3、Linux里面要查看cpu占用率要怎么做[root@sss ~]# toptop - 16:54:38 up 7 days, 5:13, 3 users, load average: 0.00, 0.01, 0.05Tasks: 77 total, 2 running, 75 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.7 us, 0.3 sy,原创 2020-06-18 14:30:23 · 364 阅读 · 0 评论 -
C++ delete []p 数组指针,如何知道该数组大小的
void main() { char p[6]; char *buf = new char[4]; strcpy(buf,"012356789");//这里越界不会报错 strcpy(p,"Hello"); //若此处越界立即报错 cout<<p<<endl; cout<<buf<<endl; delete []buf; //buf拷贝越界,这里释放数组报错}第一个问.转载 2020-06-16 16:04:43 · 622 阅读 · 0 评论