摘要:代码 int main(int arg) { arg = -13; printf("%d", arg/8); } 反汇编 005925FF mov eax,dword ptr [arg] 00592602 cdq 00592603 and edx,7 00592606 add eax,edx 005 阅读全文
摘要:上一篇 用的命令 cl /c xx.cpp //编译成obj link /dll /out:mou1.dll x.obj //链接生成dll 文件 cpp 的导入可以直接声明 导出函数 extern "C" __declspec(dllexport) void mou1() { puts("mou1 阅读全文
摘要:vs 可以直接编写创建 可以以 一个函数一个cpp 文件 来创建lib 库 类似 #include <stdio.h> extern "C" void mou1() { puts("mou1"); } 也可以通过 手工编译 cd 到当前文件夹 cl /c mou.cpp //编译 obj 文件lib 阅读全文
摘要:给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。 阅读全文
摘要:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], 阅读全文
摘要:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以「引用」方式传 阅读全文
摘要:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 说明: 为什么返回数值是整数,但输出的 阅读全文
摘要:int main(int argc,char * argv[]) { int arry[] = { 1,2,3 }; //大小下标计算 (int)arry+sizeof(int)*n arry[2] = 30; printf("%x", &arry[2]); printf("%x", (int)ar 阅读全文
摘要:0x00简介 函数存储在栈上,栈从头到尾支持函数调用和传参,每个函数在栈上都有一席之地用来记录他的必要信息总结就是以下主要信息 1.调用约定传参 a 参数的传递方向 b 参数的储存媒介 c 谁负责释放参数空间 d 返回值的处理调用者(caller)被调者(callee)_cdecl: 从右往左传递参 阅读全文
摘要:0x01整形 无符号的整数 原码,补码,反码相同 有符号的整数 正数:原码,补码,反码相同 负数:原码,补码,反码不相同,要进行计算 加法计算就是补码计算 int a = 20; //0000 0000 0000 0000 0000 0000 0001 0100 -原码 //0000 0000 00 阅读全文
摘要:strlen函数代码实现 strcpy函数代码实现 strcat函数代码实现 strcmp函数实现代码 strncpy函数代码实现 strncat函数代码实现 strstr函数代码实现 memcpy函数代码实现 memmove函数代码实现 strtok函数代码实现 阅读全文
摘要:这里用go to 来模拟汇编他们的区别 while 代码 int i = 0; while (i < 100) { i++; } goto 实现while int i = 0; WHILE_BEGIN: if (i < 100) { goto WHILE_END; } i++; goto WHILE 阅读全文
摘要:if使用优化一般是 知道数据样本分布 例如学生成绩 int main() { int i = 10; if (i <= 100 && i>90) { } else if(i <80&&i<90) { } else if (i < 60 && i < 80) { } //如此类推 return 0; 阅读全文
摘要:什么是柔性别数组 结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员 例如 typedef struct st_type { int i; int a[0]//柔性数组成员可以调整数组大小 }type_a; 使用方法 struct S { int n; int arr[]; }; int 阅读全文
摘要:什么是位段 段位的声明的结构类似,有两个不同: 1.位段的成员必须是int,unsigned int 或者signed int只要是整形就可以. 2.位段的成员名后边有一个冒号和一个数字 例如 struct S { int a : 2; int b : 5; int c : 10; int d : 阅读全文
摘要:0x01为什么存在动态内存分配 我们已经掌握的内存开辟方式有: int val=20;//在栈空间上开辟四个字节 char arr[10]={0};//在栈空间上开辟10个字节连续空间 但是上述的开辟空间方式有2个特点 1.空间开辟大小固定 2.数组在声明的时候,必须指定数组长度,它所需要的内存在编 阅读全文
摘要:0x00简介 首先要知道结构体的对齐规制 1.第一个成员在结构体变量偏移量为0的地址处 2.其他成员变量对齐到某个数字的整数倍的地址处 对齐数=编辑器默认的一个对齐数与该成员大小的较小值 vs中默认的值为8 gcc 没有默认就是累加 3.结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍 阅读全文
摘要:0x01隐藏 当我们同时编译多个文件时,所有未加 static 前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是 a.c,另一个是 main.c。 下面是 a.c 的内容: char a = 'A'; // global variable void 阅读全文
摘要:char * Mystrtok(char * string, const char * control) { unsigned char *str; const unsigned char *ctrl = (const unsigned char *)control; //注意这里使用了static 阅读全文
摘要:void * Mymemcpy(void * dest ,const void *src ,size_t count) { void *temp = dest; if (dest< src) { while (count--) { *(char *)dest = *(char *)src; ++(c 阅读全文

点击右上角即可分享
微信分享提示