
C语言
才大难为用
我不懒
展开
-
C++ 之 参数传递
关于参数返回,函数内部的肯定要销毁的,所以每次返回都会重新构造一遍类。原创 2020-10-27 11:23:20 · 90 阅读 · 0 评论 -
new与构造函数
当构造一个类时,用new呢还是用构造函数呢?当需要赋予一个指针时,用newClass *pClass = new Class(构造参数);当仅仅使用这个类时,用构造函数Class class(构造参数);除此之外就不要用其他的了。原创 2020-10-24 18:45:28 · 218 阅读 · 0 评论 -
C++ 递归与调用的区别
递归就是递归函数,0一直递归下去。数据由系统保管。迭代就是循环,最多两层函数,因此for循环里,数据由自己保管,而普通循环没有迭代的东西(例如打印1000行hello world),迭代和递归都与之前的结果有关(i并不是迭代量,迭代量首先应该是输出量)。自己保管迭代量是比较复杂的。迭代是iter,递归是recur,以后写这种函数就是单独列一个内层函数比较好。...原创 2020-10-24 18:43:24 · 359 阅读 · 0 评论 -
C++ 之 Hook编程
当我们使用特定函数来安装一个钩子时,操作系统会给这个钩子分配一个钩子链表,信息先经过钩子函数洗一遍,才行。这段程序会根据钩子类型的不同,来实现不同程度的消息截获,并且这个钩子链表里包含了这个钩子程序的地址,类型,回调函数的地址!并且钩子子程序的优先级会高于应用程序,在接受消息时会被钩子子程序先行截获,操作系统会先把消息发送给钩子,由钩子决定这些消息是否发送下去,钩子可以拦截这些消息,可以决定这些消息的作用,甚至可以屏蔽这些消息不让传递到指定应用程序当中!在安装钩子的时候是由顺序之分的,链表遵循的是先进原创 2020-10-23 08:58:23 · 3345 阅读 · 0 评论 -
C++ 之lib,dll,stl
__declspec(dllexport) int FUNCTION(int a, int b)_declspec(dllexport) int __stdcall test2(int a, int b)_declspec(dllexport)和添加def文件将一个函数声名为导出函数,就是说这个函数要被其他程序调用,即作为DLL的一个对外函数接口。通常它和extern“C”合用,形式如下:extern "C"{ __declspec(dllexport) void FUNCTION()...原创 2020-10-16 23:00:17 · 468 阅读 · 0 评论 -
C++ 之 const
const修饰变量一般有两种方式:const T *a,或者 T const *a,这两者都是一样的。有 const 修饰的成员函数(指 const 放在函数参数表的后面,而不是在函数前面或者参数表内),只能读取数据成员,不能改变数据成员;没有 const 修饰的成员函数,对数据成员则是可读可写的。常量(即 const)对象可以调用 const 成员函数,而不能调用非const修饰的函数。如果要声明一个const类型的类成员函数,只需要在成员函数列表后加上关键字const, 例如:class原创 2020-10-08 14:35:13 · 171 阅读 · 0 评论 -
C++ 之 模板
首先,我们要知道模板怎么用:template <typename T>T const& Max (T const& a, T const& b) { return a < b ? b:a; } 这样,就能传入int,float,char,都可以传进去,用的时候直接用即可。还有类模板:template <class T>class Stack { private: vector<T> ele原创 2020-09-22 18:17:22 · 137 阅读 · 0 评论 -
C++ 之 必须掌握
原创 2020-09-06 18:10:01 · 99 阅读 · 0 评论 -
C++ 之 lambda表达式,断言等
Lambda表达式有什么作用?最直观的作用就是使得代码变得异常简洁。防止污染环境。基本上就是为了防止污染环境吧。一般用两次的,函数内定义一个匿名表达式,这就很爽了。C++的匿名表达式还是蛮强大的。断言通常是用来验证参数的正确性的(判断一个表达式,如果结果为假,输出诊断消息并中止程序。),不至于说传过来一个null,在不知道的地方给空指针报错了。。。或者说,条件没有想全,一个assert填充位置,等到后期完善的时候改。ASSERT只有在Debug版本中才有效,如果编译为Release版本则..原创 2020-08-30 14:43:57 · 266 阅读 · 0 评论 -
MyLib 之 数组
Array表示分配后不可更改的数组。Vector表示分配后可以更改的数组,具体起什么名字以后再说吧。vector采用了连续内存空间的布局,start指向首元素所在的位置finish指向最后一个有效元素所在的后一个位置,这样在新增元素的时候直接就可以放在finish所指的位置,然后再将finish自增即可。end指向最后一个可用空间的后一个位置。遵循左闭右开。template<typename _Tp, typename _Alloc>class vector{pr原创 2020-08-20 10:16:35 · 164 阅读 · 0 评论 -
C语言 之 编译自己的lib库
编译和链接是不同的,编译时不需要找到对应的库文件,链接时才需要。链接时它也不找,而是采取如下办法:1. 把所有需要的库中的符号都载入内存(这里需要的库是工程里设置好的,而不是根据头文件变化而变化的)2.链接时如果需要一个函数,链接程序会到步骤1中的符号表中找,并进行定位。所以无论在哪个库文件中,只要你在工程中指定它为需要的库,则链接程序都会载入它的符号到符号表。要找到需要的函数,不需要知道它在哪个库文件中,只要符号表有即可。因此库是必须指定的,在link的时候链接上,或者说,你直接编译出.obj.原创 2020-08-07 23:19:29 · 2484 阅读 · 0 评论 -
C++ 深究
即便是动态多态,它也只是在汇编阶段完成建立的吧?静态多态就是在系统编译期间就可以确定程序执行到这里将要执行哪个函数,例如:函数的重载,对象名加点操作符执行成员函数等,都是静态多态,其中,重载是在形成符号表的时候,对函数名做了区分,从而确定了程序执行到这里将要执行哪个函数,然后就是普通的函数调用方式了。例如加点时,我们可以看到这里直接是一个lea指令将a1对象的地址放入寄存器eax中,也就是对象的this指针,然后用call指令就可以跳转到Set函数(暗示eax是call想要调用的首地址),也就是说其原创 2020-07-10 17:51:49 · 111 阅读 · 0 评论 -
C/C++ 之 二维数组,vector
既然是深究,那么我就不会讲比较基础的东西,下面只讲一些比较不简单又重要的东西。1. 我可不可以int len=5; int arr[len]; 这样写呢?不能,[]里面不能是变量或者含有变量的表达式。但真的不可以吗?首先我们看看为什么不可以,在C语言里,所有变量空间都是在程序运行之前向系统申请的,除了动态申请malloc什么的之外,也就是说,变量定义的数组空间大小是不确定的,所以定义不了,关...原创 2019-10-07 00:13:52 · 334 阅读 · 0 评论 -
vscode监视数组
在vscode中,如果你设置了一个数组指针,那么在debug的时候,它就只显示一个指针,如何让它显示一个数组呢?就用到监视这个窗口,在监视下打上*(int(*)[10])arr_name这么个东西,就可以看数组了...原创 2019-10-06 13:14:19 · 9207 阅读 · 4 评论 -
C\C++常识
数据格式详解:1.0).2^8=256 2^10=1024 2^16=65536(32768)C语言int的取值范围在32/64位系统中都是32位,范围为-2147483648~+2147483647,无符号情况下表示为0~4294967295。共有10位INT_MIN和INT_MAX分别表示有符号基本整型的最小值和最大值1.1)随便写几个输出格式记着:%.3lf,%...原创 2019-09-26 19:30:52 · 637 阅读 · 0 评论