- 博客(23)
- 收藏
- 关注
转载 apk反编译
学习和开发Android应用有一段时间了,今天写一篇博客总结一下Android的apk文件反编译。我们知道,Android应用开发完成之后,我们最终都会将应用打包成一个apk文件,然后让用户通过手机或者平板电脑下载下来进行安装。正常情况下,Android应用打包成apk之后,就无法再看到开发这个应用时使用的资源文件以及代码了。但是我们通过网上提供了一些工具,还是可以将apk进行反编译的,apk反编...
2019-04-17 16:57:49
6845
1
原创 C++笔记(6)
1.相关数据结构成员方法的调用class Stack{public: Stack() { cout << this << endl; cout << "Stack()" << endl; mpstack = new int[10]; mtop = ...
2018-05-07 01:39:21
178
原创 浅拷贝和深拷贝具体详解
当用一个已经初始化了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用,也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用。以下情况都会调用拷贝构造函数:(1)一个对象以值传递的方式传入函数体(2)一个对象以值传递的方式从函数返回(3)一个对象需要通过另一个对象进行初始化浅拷贝和深拷贝的概念: 浅拷贝:如果在类中没有显示的声明一个拷贝构造函数,那么,编译...
2018-04-29 22:38:54
187
原创 C++笔记(5)
1.构造函数和析构函数:构造函数和析构函数的名字必须和类名一样,不能随便起,析构函数的名字前加上~。 如class MyTest{MyTest();//构造函数 ~M有Test();//析构函数}构造函数和析构函数没有返回值。析构函数不能带参数,因此析构函数有且仅有一个;但是构造函数可以任意带参数,所以构造函数是可以重载的。
2018-04-22 13:33:39
349
原创 C++笔记(4)
1.通过引用的一些了解,得到以下结论: 结论一: 引用必须初始化;初始化的值一定是能取地址的。int main(int argc,char *argv[]){ int &b=a;//&必须和变量名连接,此处是引用初始化 int *&p2=(int *)0x100;// xx 指针的引用,0x100是常量,不能取地址} 结论二: 普通的引用变量
2018-04-20 11:29:41
180
原创 C++笔记(3)
1.C/C++编译器默认的类型转换: //1.unsigned int a=1;int b=-1;//int b——>unsigned int b=一个很大的数char c=a>b?'a':'b';printf("%c\n",c);//打印出'b'//2.unsigned short a=1;//——>int a=1;int b=-1;char c=a>...
2018-04-14 23:02:28
455
原创 C++笔记(2)
2018.04.011.函数调用堆栈的过程: 2.函数的返回值怎么带出来? (1)字节数4)&&(8字节,产生临时量 临时量:临时量在函数调用之前产生,调用之前为临时量分配一块地址;在进行压栈时,给一个存放临时量的地址信息的段,从而通过此地址找到临时量;一层一层的进行循环拷贝赋值。3.参数带默认值的函数:(1)int sum(int a,int b
2018-04-03 00:38:55
143
原创 C++笔记(1)
2018.03.301.可执行文件运行时进程在虚拟内存上的布局: .data段:存放全局变量初始化且不为0的变量/指针变量 .bss段:存放全局变量初始化为0或者是未初始化的变量/指针变量2.编译,链接和运行的过程: 《深入理解计算机系统》ch7 3.IA32体系虚拟地址映射的运行过程: 《Lin
2018-03-31 21:40:14
148
转载 动态开辟二维数组
一、二维数据的内存空间动态分配方法一:void malloc2D_1(int **&a) { a = new int*[xDim]; for(int i=0;i<xDim;i++) a[i] = new int[yDim]; assert(a!=NULL); } int main() { int
2017-11-18 16:11:47
369
原创 内存泄漏
内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 程序中所用的数据分别存放在静态存储区和动态存储区中。静态存储区数据在程序的开始就分配好内存区,在整个程序执行过程中它们所占的存储单元是固定的,在程序结束时就释放,因此静态存储区数据一般为全局变量。动态存储区数据则是在程序执行过...
2017-11-18 15:44:16
219
原创 无类型与无类型指针
无类型,又为抽象类型:没有对应的实体,不能直接定义变量,但可以定义指针。无类型指针:成为泛型指针,只要是地址都可以存放,无法对内存进行解释。 (1)失去指针指向的功能; (2)p指针此时不具有+1的能力。(在Gcc编译器下,无类型指针课加1。)void*是一种特别的指针,因为它没有指向的类型,或者说不能
2017-11-14 16:54:21
1680
转载 scanf gets
scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。char string[15]; gets(string); /*遇到回车认为输入结束*/scanf("%s",string); /*遇到
2017-11-14 16:31:08
208
原创 静态变量,非静态变量
静态变量:静态变量的类型关键字是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量, 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。 对于自动变量,它属于动态存储方式。 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。 由此看来,一个变量
2017-11-14 16:22:38
359
原创 野指针和悬空指针
野指针:野指针指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为NULL避免,而只能通过养成良好的编程习惯来尽力减少。对野指针进行操作很容易造成程序错误。(1)成因野指针主要是因为这些疏忽而出现的删除或申请访问受限内存区域的指针。a.指针变量未初始化:任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。
2017-11-14 15:51:13
9037
原创 指针与数组
1.指针操作数组快于下标操作数组2.数组的空间分配.如int a[10];——会在空间分配出40个相邻的内存单元来(10*4)。注意事项:a、数组不可以进行++ar运算;也不可以ar=NULL;//数组名退化成指针后,不可以++ar和赋值操作,因为退化后ar为常量值,代表首元素的地址b、&ar指整个数组的地址,&ar+1则指的是下一个数组的首地址。3.指针操作数组
2017-11-11 13:04:49
219
原创 声明和定义
声明就是指给除了当前变量或者函数,或者类什么的名字,不给其中的内容,就是先告诉你有这样一个什么类型的变量或者函数,但是这个变量或者函数的具体信息却是不知道的。就好比跟你介绍一个人的时候,声明就是只告诉你这个人叫什么,但是缺不给你说这个人到底怎么样,他有哪些优点,缺点,喜好问题是什么的。定义就不一样了,定义直接告诉你了所有的东西,这个变量是什么,这个函数是什么功能,这个类里面包含了什么东西。
2017-10-17 18:00:35
367
原创 关于break,continue,goto,return语句区别详解
关于break,continue,goto,return语句区别详解(1)break break语句功能: a、 switch语句中,break语句会终止其后语句的执行,退出switch语句。 b、使一个循环立即结束,也就是说在循环中遇到break语句时,循环立即终止,程序转到循环体后的第一个语句去继续执行。 注意事项:
2017-10-14 17:34:08
422
原创 sizeof和strlen(2)
strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。 char aa[10];cout char aa[10]={'\0'}; cout char aa[10]="jun"; cout 而sizeof()返回的是变量声明后所占的内存数,
2017-10-11 23:47:53
180
原创 sizeof和strlen
Sizeof与Strlen的区别与联系:1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是算符,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。sizeof还可以用函数做
2017-10-11 23:39:46
211
原创 C语言中变量的存储方式和生存期
在C语言的一个源文件中从变量的作用域的角度来观察,变量可分为全局变量和局部变量(外部变量) 1、局部变量分量种,一种是函数内部定义的变量,它只能在本函数内使用,此函数外不能使用。另一种是在函数的复合语句(如{}包含的程序块)中定义变量,它只能在本复合语句内使用,该复合语句外不能使用。 2、全局变量是在函数之外定义的变量。全局变量可以为本文件中函数所共用(用extern声明后也可被外
2017-10-11 23:36:18
1246
原创 可见性
变量的可见性变量的可见性与变量的定义位置,作用域等有关,比如某一全局变量定义在一函数之外(该函数内未再次定义同名变量),但函数也可以使用该变量,此时便是存在且可见的,但对于其他函数中定义的变量,在该函数内就是不可见的,除非有拓展定义。所以,变量存在,但不一定可见。函数的可见性eg:在A.h中声明了函数原型 void Test(void);在A.c中#Include A.h并对Tes
2017-10-11 23:20:13
346
转载 inline的用法
(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。 inline int min(int first, int secend) {/****/}; inline函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数。与非inline函数不同的是,inline
2017-10-11 22:16:29
136
原创 StrToInt 和 IntToStr
Delphi编程中的 StrToInt 和 IntToStr 是什么意思?这是两个类型转换函数:StrToInt :是指将字符型数据转换为数值型数据,当然要是数字型的字符,主要是用于数学计算,比如有字符型变量sum='15',要计算 字符'15'加上数值8的时候就需要用函数进行转换,StrToInt(sum)+8.IntToStr:和上面的函数正相反,它是把数值类型转换为字符类型,
2017-09-28 17:32:14
2860
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人