自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 资源 (1)
  • 收藏
  • 关注

原创 RecyclerView通用适配器

​ RecyclerView 可以让您轻松高效地显示大量数据。您提供数据并定义每个列表项的外观,而 RecyclerView 库会根据需要动态创建元素。​ 顾名思义,RecyclerView 会回收这些单个的元素。当列表项滚动出屏幕时,RecyclerView 不会销毁其视图。相反,RecyclerView 会对屏幕上滚动的新列表项重用该视图。这种重用可以显著提高性能,改善应用响应能力并降低功耗。​ 查找了网上众多写法,有很多不是失效了就是不够简洁,个人觉得还是文档中的写

2021-04-24 20:36:58 687 1

原创 dex文件格式------map_list解析

授人与鱼不如授人与渔,作为初学者,最重要的是学会查看官方文档,自主学习。首先放上google官方文档对dex解释的链接,里面相当详细的介绍了dex的格式的组成。https://source.android.google.cn/devices/tech/dalvik/dex-format#header-item上一篇文章解析了header_item,今天来解析map_list,老规矩,先查看map_list定义格式size uint 列表的大小(以条目数表示)list map_item

2020-06-20 22:30:55 569

原创 dex文件格式------header_item解析

授人与鱼不如授人与渔,作为初学者,最重要的是学会查看官方文档,自主学习。首先放上google官方文档对dex解释的链接,里面相当详细的介绍了dex的格式的组成。https://source.android.google.cn/devices/tech/dalvik/dex-format#header-item类型指南byte 8 位有符号整数ubyte 8 位无符号整数short 16 位有符号整数,采用小端字节序ushort 16 位无符号整数,采用小端字节序int 32 位有符号整数,

2020-06-20 21:38:53 441

原创 2020年android studio ------jni常用函数总结

jni常用方法c函数获得java类jclass (*FindClass)(JNIEnv*, const char*);获得java变量 jfieldID (*GetFieldID)(JNIEnv*, jclass, const char*, const char*);获得java变量值 jobject (*GetObjectField)(JNIEnv*, jobject, jfieldID);获得java静态变量jfieldID (*GetStaticF

2020-06-15 12:04:12 518

原创 2020年最新as中jni----------动态注册

第一步:静态代码块 导入so库static { System.loadLibrary("native-lib"); //native-lib是so名,可随意更改}第二步:写外部函数public native String getString(); //native代表c\c++实现第三步:创建新的 C/C++ 源代码文件要将新的 C/C++ 源代码文件添加到现有项目,请按以下步骤操作:如果您的应用的主源代码文件集内还没有 cpp/ 目录,请按如下所示的方法创建一个:从 I

2020-06-15 11:44:40 207

翻译 2020最新as项目中添加jni---------静态注册

第一步:静态代码块 导入so库static { System.loadLibrary("native-lib");}第二步:写外部函数public native String getString(); //native代表c\c++实现第三步:利用javah生成函数头进入到工程的src/main/java目录中执行javah -jni com.example.myapplication.MainActivity(需要java配置好环境)第四步:创建新的 C/C++ 源代码文件

2020-06-15 11:02:46 440

原创 从汇编层次理解malloc函数

很多新手练习malloc都喜欢用一个for循环开辟一个堆空间,大多时候会直接卡死,而有不知道是什么原因造成的。就会很困惑,如果你也有此困惑,那么就耐心的看下去。一个32位的cpu有32位,八位是一个字节,总共是四个字节,用十六进制表示就是0x00 00 00 00,cpu是通过寻址来操作的,32位(最大数2的32次方)的最大地址值为0xFF FF FF FF,最小地址值为0x00 00 00 0...

2020-05-01 12:27:18 1842

原创 STL容器简单介绍

stringstring是一个类,定义在头文件<string>中构造方法string str; //无参构造string();//创建了一个空字符串相当于string str;string(const string& str)//使用一个string对象初始化另一个string对象string(const char*s)//使用字符串s初始化string(int...

2020-04-30 18:33:36 198

原创 常用排序方法

冒泡排序(适合少量数据,多次排序稳定)思路一:lenght为arr的长度void Bubble(int arr[],int lenght){ for (int i = 0; i < lenght; ++i) { for (int j = 0; j <lenght-i-1;++j) { if (arr[j] &...

2020-04-26 22:28:17 192

原创 c语言手写平衡二叉树非递归实现

有了递归实现为啥还要用非递归呢?你会不会有疑惑?如果有,请接着看。函数的调用需要用到栈,一个应用分配到的栈空间一般为1M大小,在数据很大的情况会造成栈溢出,所以要少用递归。不用递归实现的原理是模拟栈的运行机制------先进后出,如果这个不会的话,可以看我写的数组模拟栈(现在还没写)。头文件#ifdef __cplusplusextern "C" {#endif#define _C...

2020-04-22 20:44:49 275

原创 手写平衡二叉树(二)

删除数据struct Person* removes(struct Person* p,struct Person*data,int(*compare)(struct Person* p1,struct Person* p2)){//判断参数是否为空,为空返回传入的参数 if (NULL == p) { return p; } if (NULL == data) { ret...

2020-04-21 21:31:42 277

原创 c语言手写平衡二叉树(一)

定义结构体struct Person{//父节点 struct Person* parent; //左子节点 struct Person* lchild; //右子节点 struct Person* rchild; int m;};struct ABLtree{//保存根节点信息 struct Person* root;};初始化根节点struct ABLtre...

2020-04-21 20:52:30 268

原创 c编译动态库和静态库流程

编写:创建一个新项目,右键解决方案—>添加—>新建项目空选项—>下一步输入名字和路径---->创建右键项目名—>新建项—>新建一个.h头文件和.c源文件编写头文件和源文件静态编译头文件#pragma once//方便c++调用#ifdef __cplusplusextern "C" {#endif//正常函数写法即可 int a...

2020-04-18 17:24:30 300

原创 c++异常处理

try试图执行 try{}中的内容在可能出现异常的地方 抛出异常 throwtry下面 catch捕获异常catch(捕获类型)…代表 所有其他类型如果不想处理异常,继续向上抛出 throw如果没有任何处理异常的地方,那么成员调用terminate函数,使程序中断例:int myDevide(int a, int b){ if (b == 0)...

2020-04-13 22:14:17 172

原创 c++类型转换

静态转换格式:static_cast<目标类型>(原始对象)可以进行基础数据类型转换父与子类型转换没有父子关系的自定义类型不可以转换例:class Base{};class Child:public Base{};class Other{};void test(){Base *base=NULL;Child* child=NULL;//把b...

2020-04-13 19:24:34 129 1

原创 c++类模板

格式:template<class NameType,class AgeType>紧跟着类与函数模板区别,可以有默认类型参数自动类型推导,类模板不支持,必须显示指定类型成员函数一开始不会创建出来,而是在运行时才会创建例:template<class NameType, class AgeType>class Person{public: Pe...

2020-04-13 16:21:55 139

原创 函数模板

template<class T> //告诉编译器 下面如果出现T不要报错,T是一个通用类型,template<class T>等价于template<typename T>自动类型推导,必须有参数类型才可以推导例:template <class T>void mySwap(T& a, T& b){ T tmp = a;...

2020-04-13 16:19:31 117

原创 c++多态

c++支持编译时多态(静态多态)和运行时多态(动态多态),运算符重载和函数重载是编译时多态,而派生类和虚函数实现运行时多态。运行时多态:在父类上声明虚函数,发生了多态。父类的引用或指针指向子类的对象虚函数格式:virtual 返回值 函数名();例:class Animal{public: Animal() { } //虚函数 virtual void speak(...

2020-04-12 21:20:06 88

原创 c++继承

语法:class 子类 :继承方式 父类继承方式:public: 公有继承通过公有继承-->私有权限不会被继承,父类中的公有权限在子类中还是公有权限,保护权限在子类中还是保护权限protected:保护继承通过保护继承-->私有权限不会被继承,父类中的公有权限和保护权限在子类中变为保护权限private:私有继承通过私有继承-->私有权限不会被继承,父类中...

2020-04-12 21:18:19 95

原创 运算符重载

+、-、*、/、++、--、==、!=、* ->、&&、||...对于内置数据类型,编译器知道如何做运算,编译器不知道如何让两个类进行运算如果向让自定义数据类型 进行+法运算,就需要重载+运算符在成员函数或者全局函数里 ,重写一个+法运算符的函数函数名 operator+(){}运算符重载也可以提供多个版本加法运算符类名+operator+(){};...

2020-04-11 13:52:46 139

原创 c++友元函数和友元类

友元函数全局函数做友元函数友元函数目的是访问类中的私有成员属性格式:friend type 函数名 (参数...);在类中加入 friend 函数声明例:class Building {//void goodGay(Building* building)函数声明 friend void goodGay(Building* building);public: Buildin...

2020-04-10 18:43:36 305

原创 c++常函数,常对象

void指针访问成员函数如果成员函数没有用到this指针,那么空指针可以直接访问如果成员函数用到this指针,要注意加if判断,如果this为NULL,return常函数格式: void func() const{}常函数 修饰是this指针,const Type* const this常函数不能修改this指针指向的值常对象在对象前加入const 修饰格式:const ...

2020-04-10 18:17:23 123

原创 c++ this指针

类中默认有一个对象的this指针,编译器默认加的this可以解决命名冲突指针永远指向当前对象*this永远指向本体代码这样:class Person{public: Person(int A){ this->A = A;} int A; };实际是这样:class Person{public: Person(Person* this,int A)...

2020-04-10 17:50:34 73

原创 c++静态成员变量和静态成员方法

静态成员变量编译阶段分配内存所有对象共享数据可以通过对象访问、通过类名访问有权限控制类内声明,类外初始化(通过类名访问是会不调用构造函数)class Person{public:Person(){}static int age;}int Person::age=0;c++静态成员方法可以访问静态成员变量,不可以访问普通成员变量普通成员函数可以访...

2020-04-10 17:31:40 179

原创 c++对象的构造和析构

初始化和清理​ 对象的初始化和清理是两个非常重要的安全问题,一个对象或变量没有初始时,对其使用后果未知,同样的使用完一个变量,没有及时清理,也会造成一定的安全问题,c++为了给我们提供这种问题的解决方案,构造函数和析构函数,这两个函数将会被编译器自动调用,完成对象初始化和对象清理工作。​ 即使你不提供初始化操作和清理工作,编译器也会给你增加默认的操作,只是这个默认初始...

2020-04-09 19:23:58 117

原创 c++语言封装与c语言封装

c语言的封装属性和行为分开处理,类型检测不够c++中的封装 严格类型转换检测,让属性和行为绑定到一起,属性和行为作为一个整体来表示生活中的事物。控制权限:class和struct是一个意思,唯一的不同 默认权限,public(公共权限)struct默认权限是public ,内外部可以直接访问private(私有权限,子类不可以访问)class默认的权限是private 私有权限,外...

2020-04-09 14:27:40 274

原创 extern C浅析

解决了c++中调用c语言的代码方法一c++中处理extern “C” 方法的声明方法二c中处理ifdef__cplusplus extern "C"{c代码或声明ifdef__cplusplus}#endif

2020-04-09 13:09:22 63

原创 c++函数

函数重载语法:函数名相同,函数参数不同实现函数重载的条件同一个作用域参数个数不同参数类型不同参数顺序不同c中函数都是全局作用域,函数名不能相同。c++中函数名可以相同函数的返回值不可以作为函数重载条件,const可以做为重载条件void func(int a,int b=10){};void func(int a);当函数重载碰到了函数默认参数,要注意避免二义性...

2020-04-09 12:53:57 149

原创 c++引用

引用就是起别名引用的基本语法Type(类型) &别名=原名 &写在左侧,叫引用,写到右侧,叫取地址 int &b=a; b与a地址相同int* b=&a;b等于a的地址值引用必须初始化 ,引用初始化后不可修改int a=10; int &b=a;//引用的a必须初始化int c=20;b=c; //不能赋值,错误对...

2020-04-08 22:10:59 71

原创 c++对c语言的增强

全局变量检测增强c可以多个同名全局变量c++不可以有多个同名全局变量int a;int a=10;在c中可以编译完成,c++中不能编译完成函数检测增强,参数类型增强,返回值检测增强,函数调用参数检测增强c++参数类型,调用参数,返回值必须一致定义:int getRect(w,h){}c中可以编译完成,c++中不可以c++必须写参数类型,如果有返回值也必须写int ...

2020-04-08 20:44:12 176

原创 c++简单介绍

#include <iostream>//标准输入输出流 in输入 out输出using namespace std; //使用命名空间 std 打开一个叫std房间//cout是c++中的标准输出流//endl是输出换行并刷新缓冲区//<<左移运算符int main(){ cout << "hello world\n" << endl...

2020-04-08 19:00:37 133

原创 Visual Studio添加代码片段

​ 经常在视频中看到添加完一个.c文件或者.cpp文件后,输入#1会直接输出一段代码,看起来非常的方便,但是一直不知道怎么做到的,你是不是也有这样的困惑呢?那么接下来就来教你如何添加代码片段。 首先打开Visual Studio,选择工具-->代码片段管理器​ 1、2处都选择Visual c++ —>记下3处的路径随便复制或新建一个后缀名为...

2020-04-08 16:02:34 1027

原创 位运算符

按位取反~0与1互换 010~010 101(负数)110(反码)111(补码)位与&同为1才为1 10011&00010 00010位或|有1就为1101011111位抑或^上下位一样为0,不一样为1;A:10101110B:11011100R:01110010A^B=RR^A=BR^B=A...

2020-04-08 13:54:57 99

原创

栈是现代计算机程序里最为重要的概念之一,几乎每一个程序都使用了栈,没有栈就没有函数,没有局部变量,也就没有我们如今能见到的所有计算机的语言。栈的定义:在经典的计算机科学中,栈被定义为一个特殊的容器,用户可以将数据压入栈中(入栈,push),也可以将压入栈中的数据弹出(出栈,pop),但是栈容量必须遵循一条规则:先入栈的数据最后出栈。在经典的操作系统中,栈总是向下增长的,压栈的操作使得栈顶的地...

2020-04-03 22:51:09 192

原创 c语言extern和static区别

static静态全局变量是内部链接,在静态区extern全部变量默认外部链接extern置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义内部链接和外部链接区别如果变量是内部链接的话,那么此变量只能在当前文件内访问如果变量是外部链接的话,那么此变量可以被其他文件使用局部静态变量和全局静态变量区别全局静态变量和局部...

2020-04-03 19:02:36 268

原创 c语言typedef、void、sizeof简单介绍

typedef(起别名)是c语言的一个关键字,作用是为一种数据类型(基本类型或自定义数据裂隙)定义一个新名字,不能创建新类型与#define不同,typedef仅限于数据类型,而不能是表达式或具体的值#define发生在预处理,typedef发生在编译阶段例:typedef unsigned long long ull;ull a=10;例:struct student{...

2020-04-03 16:28:46 593

原创 数据类型

数据类型的基本概念数据类型可以告诉编译器分配多少内存可以放的下我们的数据类型是对数据的抽象类型相同的数据具有相同的表示形式、存储格式以及相关操作程序中所有的数据都必定属于某种数据类型数据类型可以理解为创建变量的模具:固定大小内存的别名分类基本类型整型 int、short、long字符型 char实型(浮点型) float(单精度实型)、doubl...

2020-04-03 14:55:16 89

原创 # C语言双向链表

头文件此为本人自己分析写的,如有不对之处,欢迎指正。#pragma once#define _CRT_SECURE_NO_WARNINGS#include <stdlib.h>#include<stdio.h>#include<string.h>struct LinkNode{ struct LinkNode* up; struct Li...

2020-04-03 13:44:05 89

原创 # c语言单向链表(方式二)

头文件#pragma once#define _CRT_SECURE_NO_WARNINGS#include <stdlib.h>#include<stdio.h>#include<string.h>struct LinkNode{ struct LinkNode* next;};void*Init_LinkList();void In...

2020-04-02 21:35:27 78

原创 c语言单向链表(方式一)

头文件#pragma once#define _CRT_SECURE_NO_WARNINGS#include <stdlib.h>#include<stdio.h>#include<string.h>void*Init_LinkList();void Insert_LinkList(void* list,int pos, void* data...

2020-04-02 18:53:05 98

typora-setup-x64.exe

Typora是一款轻便简洁的Markdown编辑器,支持即时渲染技术,这也是与其他Markdown编辑器最显著的区别。即时渲染使得你写Markdown就想是写Word文档一样流畅自如,不像其他编辑器的有编辑栏和显示栏。 typora开源项目,因下载很慢,所以特地下载下来,方便大家下载。

2019-12-31

空空如也

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

TA关注的人

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