24_const,引用,缺省参数

作业 #include <limits.h> //数据类型最大有效位 float转double会丢失精度 cout.hex要单独使用,得到的是枚举值 语言改进宏成const 1. 宏的类型由表达式决定的,宏本身没有类型 2. 好用的宏应该是类型明确,又能被调试,不能被修改,C++出现了const 3. const常量不能直接获得地址,调试的时候可以从全局常量附近找地址,但修改了也没用。发布的时候没有这个地址。 4. 解决指针误操作问题,列如一个”=”修改 和 “==”判断,使用const修饰指针经常修饰函数的参数。但是还是可以强行取地址修改(破坏了语法) 5. *右边加const表示指 ......

23_c++初识

C plus plus 兼容C语言 机器语言, 01加法,11减法 高级语言 移值性 {加法} A B C,面向过程编程 设计 面向对象 维护性(软件可读性:好扩展,好改) 对于C语言的改进 1.改进语法(核心就是类型判断) 1.1类型引导 int n = -1; unsigned int I = n; printf(“I = %ud\r\n”, i); 1.2类型识别 #include <iostream> //输入输出流, cin, cout auto n = 1.5f; //初始化值是什么类型就是什么类型 std::Cout << ”size = ” << n; //两个冒号命名空间,连续输出 << endl; //换行与刷新缓冲器 1.3推导类型 float num = 1. ......

22_位运算位段与文件

作业讲解 memcpy memmove(psz + 5,psz,strlen(“hello world”) + 1) Debug版和Relese版的结果不同 思考题 求绝对值 int myabs(int n) {  int m = n >> 31;// if n < 0,m = ‐1,else m = 0 n = n ^ m;// if m = ‐1, n^m == ~n,else n^m == n  //if m = ‐1, n ‐ m == n + 1, else n ‐ m == n return n ‐ m; } 位运算 1.局部求反,异或 0100100111000 XOR  0000111111000 2.交换 int nA = 9; int nB = 16; nA = nA^nB; nB = nA^nB; nA = nA^nB; 3.定理 a and 0 = 0; a and 1 = a; a or 0 = a; a or 1 = 1; a xor 1 ......

21_堆

结构体 结构体过大的时候函数参数使用指针 堆 1.malloc:申请堆空间,找到空闲区表占用,返回首地址void *,通常堆的分配表在堆的起始空间连续处。 2.从windows xp sp2开始堆地址开始基址随机化保护 3.Free:释放空间 4.申请20个char空间写hello,申请8个char空间写world,把20个char空间释放。再次申请20个char空间有几率放下一样的空间 5.realloc,堆空间扩容,返回扩容的后的大小,realloc之后需要修改原指针地址 6.FEEE和DDDD堆空间销毁或者释放,CDCD(屯:引用了未初始化的)和EEFE表示释放 7.calloc:第一个是申请多少个大 ......

20_结构体共用体枚举

结构体 结构体嵌套结构体后的大小,只算嵌套结构体中的最大值 网络数据包中没有规定对齐值,所有都是连续排放,使用C/c++设置对齐值为1 栈空间取模4对齐 C++嵌套的结构时候,在嵌套里面写定义就为私有的,访问的时候使用::访问某类型下 C++嵌套如果不写名字的话就等于黑心厂 同一空间反复利用,结构体定义一个最大的数据类型,然后使用的时候强转地址 预处理 1.#pragma pack(1) //设置后面结构体的数据成员对齐值为1 #pragma pack(8) //到这里恢复 2. 不破坏别人的对齐值,避免区分谁先包含的问题 #pragma pack(push) //保存 ......

19_结构体

写文档 1.可行性研究文档:由搞商务的BOOS写 2.软件需求说明书:由甲乙双方或者公司上下级 3.概要设计说明书:不能设置数据库、语言等等 4.详细设计说明书:选择最合适的语言描述出来,保证低级程序员能实现出来 5.测试分析文档:功能测试 6.用户手册:用户看到界面怎么使用 结构体 语法 定义的一般形式 Struct 结构体类型名称 { //成员组织,基本数据、结构体、共联体 类型名1 成员名1; 类型名2 成员名2; … 类型名n 成员名n; }; //仿微软tag前缀:MSG Typedef struct 结构体类型名 {}别名; C++直接struct 结构体类型,实例化: ......

18_指针三

作业讲解 函数指针只能调用不能运算 字节扩展,无符号数,高位0扩展,有符号数,正数高位填0,负数高位填ff 指针 1.指针数组:数组的元素是指针叫做指针数组 char *aryString[] = {     “hello”,     “c++”,     “Java” }; 元素类型是char* 优点 1. 访问代价均等 2. 空间利用率高 3. 本质是做了个索引 4. 元素是定长(char* 4字节) 缺点 1. 插入,多增加一个索引值 2. 删除,多减少了一个索引值 3. 数组插入删除效率低 数组指针 /* 二级指针 */          int n = 8;          int *pn = &n;          (int *)ppn = &pn ......

17_指针二

作业讲解 1* 比 ++ 优先级低 1.1 分配表,开始,和长度 1.2 硬件抽象层HAL 3碎片管理方式(不需要做碎片整理) 4分配表连续管理(FAT) 5不连续的(簇链)(NTFS) 1.6 计算机都在分配资源和回收资源 指针二 1,打印函数返回的临时栈空间会出错 Put(pStr); Printf(pStr); 2.函数指针 Void foo() {     Puts(“foo”); } Void fun() {     Puts(“fun”); } Void _stdcall test() {     Puts(“fun”); } void (__cdecl*pfnTest)() = NULL; //函数指针的定义,必须满足返回值,调用约定,参数序列一致 pf ......

16_指针一

宏 #define _T(x) L##x #define __T(x) _T(x) _T支持宏,__T不支持宏 TCHAR.H Routine:兼容版 编译器的TCHAR.H 指针和地址的区别 地址不能取数据,没有数据类型(解释方式) 这里的0x009DFD04地址不能解析,因为不知道类型 2.指针包含地址信息,地址类型(解释信息) 0x0073FE78地址是指针的地址,可以解析指向的0x0073FE84地址的数据 指针语法 1.定义初值, type *pVariableName = NULL; //初始化为NULL是为了没指向就使用时报错 int near *lpA; //16位汇编兼容加l int far *lpB; 使用之后恢复 pVariableName = 0x123456; *pVariab ......

15_预处理

1.文件包含, #include,找到文件,替换进去。区分””和<>,””先查找当前目录,<>先查找环境变量目录。不区分后缀名,常见.hpp 2.条件编译,参与编译 #define ISDEBUG 1 #if ISDEBUG 1 //如果不写1,非0为真 printf(“%d”, argc); printf(“%s:%d\r\n”, __FILE__, __LINE__); #else system(“pause”); #end if //如果使用直接使用C语言if逻辑判断,会把内置的宏信息存到文件中,__FILE__,__LINE__,暴露敏感信息 #if defined(ISDEBUG) //检查宏名是由有定义,有返回1,没有返回0 #ifndef 有宏返回0,没有返回1 3 ......