![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
xxjkkjjkj
这个作者很懒,什么都没留下…
展开
-
为什么uint16_t的范围是0~65535?
因为C1n = A1n啊,所以只要是只选出一个的,不管每个位置有几种可能排列还是组合都一样。每一位密码只有两种可能,按照乘法原理你要每一位都选出来才可以,所以是 2^4=16种可能。两个可能选一个出来,应该是C12,至于A12感觉他们在这个问题上是一样的。每一位只有两种可能,每位选出一个 一共有2^16 = 65536个组合。那天我改密码,如果你的密码是例如+ - + -这样的四位密码。也就是全0 ~ 全1 则范围是 0 ~ 65535。也就是0000 0000 0000 0000。原创 2024-03-05 19:58:55 · 209 阅读 · 0 评论 -
可变参数列表
demo 2:求任意多个数据中的最大值(至少一个),要求不能使用数组因为目前参数个数不确定,那么函数编写的时候,参数个数也无法确定,换句话说,函数也就没法编写不过,C提供了满足该场景的解决方案:可变参数列表。原创 2023-11-29 12:41:48 · 783 阅读 · 0 评论 -
二维数组-专项
原创 2023-07-02 09:37:58 · 35 阅读 · 0 评论 -
如何正确写出一个宏?
几个宏的经典错误写法原创 2023-06-15 21:35:01 · 85 阅读 · 0 评论 -
为什么2个16进制是1byte??
1个十六进制位 至少需要4位 二进制 来表示 因为最大的16进制 15(F)要表示需要 4位(bit) 二进制来表示 0000 ~ 1 1 1 1 0~15。2个16进制 = 8 bit = 1 byte(字节)则 1个 16进制 = 4 bit。原创 2023-06-14 19:51:42 · 1002 阅读 · 0 评论 -
三子棋及五子棋的实现
三子棋,五子棋,N子棋原创 2022-11-08 19:05:05 · 133 阅读 · 0 评论 -
最小公倍数及最大公约数
求两数的最大公约数,名义上是辗转相除,其实就是取余迭代关系为m,n两数 m%n看余数是不是0,如果不是0,m=n;n=r;如果r=0;此时的n就为最大公约数最小公倍数对于正整数a,正整数b,假设他们的正整数最小公倍数是m则m/a = i ,因为m为最小公倍数,所以i为1,2,3、、、、这些数字,也就是商。m=a*i; 再用a*i %b i = 1 i++;如果a*i %b ==0;则此时a*i为最小公倍数;定理:最小公倍数X最大公约数=aXb如果忘记一个,直接算出另一个,用axb一除原创 2022-12-03 14:57:31 · 118 阅读 · 0 评论 -
C语言扫雷实现
C语言扫雷展开原创 2022-11-17 17:45:36 · 614 阅读 · 0 评论 -
C递归实现汉诺塔的顺序与步骤
C递归实现汉诺塔的顺序与步骤原创 2022-11-04 14:06:52 · 236 阅读 · 0 评论 -
表达式求值中的算术转换及隐式类型转换
char 和short 再参与表达式运算前,要进行(整型提升);因为C的整型算术运算总是至少以缺省(默认)整型类型的精度来进行的有符号,整型提升高位补充符号位再放进char等,只有八字节要进行截断例如:原创 2022-12-03 15:24:55 · 75 阅读 · 0 评论 -
易错三连等判断
打印输出为0从左向右head==tail 结果为1,1==0为假,则输出0;原创 2022-12-06 15:22:41 · 68 阅读 · 0 评论 -
青蛙跳台阶问题(c实现)
可以把这种情况看成,第一步跳一步后面有f(n-1)个(+)第一步跳2步后面有f(n-2)个方法,然而后面的方法数可以递归出来。但是这种递归有很多冗余,和斐波那契数列的递归一样,递归在有时候是有缺陷的。可以用迭代的方式避免。青蛙跳台阶,1次跳1步,1次还可以跳2步。假设有一个函数f(n)可以算出n个台阶青蛙有几种跳法。青蛙第一次有两种跳法,要么跳一个,要么跳2个。跳一个还剩2个台阶,而跳2个台阶的方法数已知。跳2个还剩1个,而跳1个台阶的方法数已知。当n=2 2种。原创 2022-11-04 15:29:40 · 163 阅读 · 0 评论 -
字符串逆序(递归实现)和内存地址差4的疑问
字符串逆序(递归实现)和内存地址差4的疑问原创 2022-11-05 20:10:54 · 48 阅读 · 0 评论 -
动态内存 柔性数组
p指针指向开辟的空间,test()函数结束时,即使想释放malloc出来的空间也无法释放,因为p是局部变量出了函数被销毁,忘记释放造成了内存泄漏。3.free(p) free掉p指针指向的内存空间,但P指针仍然指向所释放的空间,形成野指针,所以要p = NULL。如果后边没有足够的空间,realloc会拷贝旧空间的数据到新空间的位置,并且释放旧空间,同时返回新空间地址。函数进行内存的动态分配,并且分配的内存应该大于结构的大。返回的这种结构大小不包括柔性数组的内存。小,以适应柔性数组的预期大小。原创 2023-01-17 18:39:36 · 33 阅读 · 0 评论 -
void*指针的理解
缺点:不能解引用,不能+1,-1,因为void*不知道访问多少字节,跳过多少字节。void* 为无类型的指针 可以接收任意类型的指针。原创 2023-01-07 15:37:36 · 34 阅读 · 0 评论 -
整形数据存储及对应运算
int 范围 chat范围原创 2023-01-01 21:36:24 · 177 阅读 · 0 评论 -
二维数组首元素地址为第一行数组的地址
第一行为一个数组,4个元素,arr为数组的地址,要用数组指针保存。p是个指针 指向了[4]的这样的数组,类型为int。原创 2023-01-07 00:18:55 · 99 阅读 · 0 评论 -
结构体内存对齐
【代码】结构体内存对齐。原创 2023-01-14 18:18:06 · 44 阅读 · 0 评论 -
常量字符串与非常量字符串
【代码】常量字符串与非常量字符串。原创 2023-01-06 22:30:24 · 86 阅读 · 0 评论 -
(*dest++ = *src++) != ‘\0‘
这种表达式的结果为赋值的结果,并且是已经赋值给*dest++后再进行判断,所以赋值是已经发生了的。并且有num这种计数可以不创建新变量count,可以结合再while括号里面。原创 2023-01-15 20:29:45 · 217 阅读 · 0 评论 -
库函数memset和其他
也就是说如果2成立,那么循环就是2->3->4->2->3->4.......这样循环。for循环从1开始,进入2判断为真,进入3,再到4,再到2判断,为真就继续。此时s1,s2为全局变量,s3,s4为局部变量,需要注意区别。原创 2023-01-12 19:03:27 · 45 阅读 · 0 评论 -
对指针*的理解
分开看 char* *p 后面的*说明p是个指针,char*说明指向了一个char*类型的指针,所以p是二级指针。原创 2023-01-07 00:29:08 · 54 阅读 · 0 评论 -
循环的断点调试,指定第几次循环
例如本次,想要i=3的时候的循环,条件要设到i后边,令i==3,回车,再按F5即可。循环的断点调试,指定第几次循环,右击断点添加条件,断点要设置在条件之后。原创 2022-12-10 11:57:48 · 716 阅读 · 0 评论 -
C文件操作
利用以下函数对文件写入或者读取,对于fopen的打开方式也要变化。fwrite 和 fread 具体见动态开辟内存通讯录。输入和输出,和所谓的读写都是看内存的输入输出来判断的。先要有一个文件,不需要手动创建,利用文件指针来维护。有的函数 适用于所有输入输出流 例如。文件,stdin stdout。二进制可以输入输出多个数据。原创 2023-01-18 17:27:54 · 60 阅读 · 0 评论 -
易混淆:转义字符\xdd和格式输出%x
而\xdd dd为两个16进制数字,如\x10 代表着将10这个16进制转化为10进制所代表的ASCI码值,10 ->16 16作为码值代表的是一个箭头。在printf函数中,如果想把某个整数以16进制打印输出:%x。原创 2022-12-26 14:12:39 · 248 阅读 · 0 评论 -
JZ17 打印从1到最大的n位数 【关于(*p)++和*p++的讨论】
p++ 因为后置++优先级高于* 所以地址后置++,再解引用,所以所指向的值没变,指针P变了。(*p)++ 是指针所指向的变量后置++,指针P却没变。原创 2022-12-26 19:26:18 · 47 阅读 · 0 评论 -
补码二进制减法计算
二进制表示为-11-2 补码1111 ... 1110 原码1000 ... 0010。原创 2023-01-02 23:36:36 · 1716 阅读 · 0 评论 -
数据的存储
对于char来说 在整型提升时候认定高位为符号位,所以提升时,提升的是char变量如10000000就提升的是1,如果是0就补充0。1个十六进制用4个二进制位(也就是bit位)来存储(因为16进制范围0~15,二进制1 1 1 1,8421=15)如果数据超过了1个字节,那么存储时就有一个顺序问题,最后保留了大端和小段这种方式。补码到原码 ----取反,+1 or -1再取反。2个16进制-----8bit ------1字节。同时,加法和减法也可以统一处理(:原码到补码 ---取反,+1。原创 2023-01-04 13:41:25 · 56 阅读 · 0 评论 -
函数名及函数指针
函数名和&函数名都是函数的地址。原创 2023-01-08 10:38:33 · 35 阅读 · 0 评论 -
const 修饰指针 ---- 寒假day02
修饰的是指针指向的内容 *p无法修改 a得值 等价于 int const *p = &a;修饰p这个指针变量 无法修改指针指向。原创 2022-12-27 19:15:19 · 60 阅读 · 0 评论 -
截断和整形提升
实际上并未发生整形提升,而是将32位二进制截断后0000011的八位存到a里。所以整型提升发生在表达式中,表达式中char 和short 会整型提升。而到了表达式 c = a + b;需要整型提升,然后再被截断。整型提升,补充的是符号位,符号位是1,补充1,是0,补充0;最后到了Printf是特殊的整形提升后输出。char b = 127同理。原创 2023-01-03 23:27:49 · 40 阅读 · 0 评论 -
数组名不是首元素地址的两种例外情况
数组名和数组名在数值上都是数组首元素地址,但是如果将&数组名放在指针P中,令P+1会发现跳过的整个数组大小;说明访问的是整个数组大小。如:char* p1;p1+1 跳过1个字节 int* p2;p2+1 跳过4个字节。如:char* p1;*p1 访问了1字节大小,int*p2 *p2访问了4个字节。1.指针类型大小决定了指针解引用操作符能访问多少字节大小的空间。2.指针类型决定了指针+1,-1会跳过几个字节。计算的是整个数组的大小有多少字节。原创 2022-12-25 20:24:06 · 72 阅读 · 0 评论 -
逆置字符串
right-- 证明了指针也可以减1 向后走原创 2023-01-25 11:41:17 · 78 阅读 · 0 评论 -
字符串+内存函数模拟实现
【代码】字符串+内存函数模拟实现。原创 2023-03-02 12:49:47 · 50 阅读 · 0 评论 -
浮点数在内存中存储
图中1001.0 = 1.001 * 2^3 类比十进制 1001 = 1.001 * 10^3。%f 以浮点数存储方式 来读取内存数据。%d 以整形补码存储 来读取内存数据。原创 2023-01-27 19:16:34 · 61 阅读 · 0 评论 -
预处理(从源文件到可执行程序(二进制)的过程)
完成了一些文本操作,头文件的包含,定义符号(#define)直接替换,宏,注释删除。期间 通过符号表中的地址 对跨文件的符号进行查找,如果没有就报错,这就是符号表作用。阶段记录各个.c文件的符号:如全局变量,函数名,像局部变量是不关心的。如果找不到正确的Add 的符号,就会发生链接错误。阶段 合并每个文件的符号表和符号表的重定位。这就是从源文件到可执行程序(二进制)的过程。每个文件都单独编译,生成.obj文件。预编译 编译 汇编。)都干了如图所示的事情。生成各自的符号表,在。原创 2023-02-10 15:32:24 · 147 阅读 · 0 评论 -
C语言思维导图
无原创 2023-03-01 20:43:45 · 48 阅读 · 0 评论