- 博客(30)
- 收藏
- 关注
原创 【数据结构入门】时间复杂度和空间复杂度
计算时间复杂度,就是计算出该算法中的基本操作的执行次数一般以算法的最坏运行情况为准,最终结果用大O渐进表示法(估算)书写空间复杂度的计算空间复杂度是对一个**算法在运行过程中临时占用存储空间大小**的量度。
2023-08-21 16:06:19 132
原创 C语言文件操作
我们知道数据在内存中是以二进制形式存储的,对于文件而言:如果不加转换直接输出到外存就是二进制文件;如果要在外存上以ASCII码形式存储,就需要提前转换最后以ASCII码值形式存储的文件就是文本文件。由此可见:对于10000在数,如果以二进制形式存储占用4个字节,如果以ASCII码存储占用5个字节。试想:那对于数字1呢?对于字符,一律使用ASCII码形式存储,但对于数值型数据,即可以使用ASCII码存储也可以使用二进制形式存储。在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指。
2023-08-19 15:08:51 131
原创 结构体(包括对齐) 枚举 联合
一、判断结构体大小 解释: 如何修改默认对齐数呢?要通过#pragma这个预处理指令,可以改变我们的默认对齐数。但修改的默认对齐数必须是2 ^ n( n>=0) 结论:一.什么是位段位段 (bit-field)是以位为单位来定义结构体 (或联合体)中的成员变量所占的空间。注意点:1.位段的成员必须是int、unsigned int 或者signed int、char 在内存中储存的方式:地址为16进制 枚举常量枚举常量就是将一些(不看作常量)字符定义成常量。我们知道#define a 3,
2023-08-17 13:23:15 104
原创 define 与typedef区别
它在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typedef。#define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用,因此使用#define之后为了防止错误,要将其解除掉。对于第二个输出,我们想要的是(5+1)*6=36,但是宏只是进行了简单的替换5+1*6=11,因此使用宏很容易出现错误,如果要避免必须每步加上括号提升计算优先级。可以看出使用typedef定义的两个变量都是int指针类型,而使用define定义的两个变量只有第一个是int指针类型。
2023-08-06 16:24:53 94
原创 更新一些c语言易错题
由于sizeof为size_t类型,所以 i>sizeof(i) 算数转换,i为无符号数,但是当i=-1为无符号数时,是一个非常大的数,所以打印出>。有的时候要考虑到大小端的问题,int为4个字节,short为2个字节,所以考虑在每个字节里面排列的问题输出结果00345;3.获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列。比如: 15 0000 1111 4 个 1。写一个函数返回参数二进制中 1 的个数。这里会用到 异或和同或 的知识;,交换两个整数的内容。
2023-08-03 15:13:55 59
原创 逻辑与(&&)、逻辑或(||)、按位与(&)、按位或(|)、按位异或(^)、按位取反(~)
参加运算的两个数,换算为二进制(0、1)后,进行异或运算。参加运算的两个数,换算为二进制(0、1)后,进行异或运算。参加运算的两个数,换算为二进制(0、1)后,进行与运算。参加运算的两个数,换算为二进制(0、1)后,进行或运算。运算符两边的表达式的值都为false运算结果为false。运算符两边的表达式的值都为true运算结果为true。参加运算的两个数,换算为二进制(0、1)后,其余情况为false。
2023-07-19 13:50:07 854
原创 C语言运算符优先级表详解
科学计数法 3520=3.52 E3 (E相当于X10)②关系运算(> >= < <=!优先级:取反(非not)>逻辑乘(与and)>逻辑加(或or)>异或。优先级:乘除(*/)>取余(%)>加减(+ -)取反:非运算,not,单目运算,符号 -,1为0,0为1。①算术运算(加+ 减- 乘* 除/ 取余%)逻辑乘:与运算,and,双目运算,符号∧,有0为0。逻辑加:或运算,or,双目运算,符号∨,有1为1。异或:XOR,符号^,双目运算,相异为1。
2023-07-15 17:10:13 1020
原创 逗号表达式
1、逗号表达式是C语言优先级最低的运算符。2、逗号表达式是左结合性(即按从左到右顺序运算)的运算符。我们可以发现例一和例二中,变量o最终的结果是完全不同的。我们可以先把上面两个表达式简化成👇例一:o = 表达式1,表达式2,表达式3;因为逗号表达式是优先级最低的表达式,赋值表达式的优先级高,所以会把表达式1的值直接赋值给o例二:o = (表达式1,表达式2,表达式3);
2023-07-15 16:52:03 4206 1
原创 关于数组、指针的sizeof与strlen的关系
1. int a[ ] = {1,2,3,4}; 2.char arr[] = { 'a','b','c','d','e','f' }; 3.char arr[] = "abcdef"; 4.char* p = "abcdef"; 5.int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
2023-07-15 14:16:34 58
原创 C语言-qsort函数详解
注意:比较函数中,返回类型是int,最后相减的值要强制类型转化为int ,但这也会造成错误,建议使用方法2.其中cmp是函数指针,cmp指向的是:排序时,用来比较两个元素的函数。比较名字->实际比较的是字符串->使用strcmp函数,不能使用 == 判断。size_t width, //一个元素的大小,单位是字节。qsort()函数:快速排序的函数 -引用stdlib.h头文件。size_t num, //待排序的元素个数。比较年龄->实际比较的是整形。
2023-07-14 18:55:47 306 1
原创 strlen (str)类函数
strcpy是覆盖拷贝,将source全覆盖拷贝到destination,会把’\0’也拷过去,且必须考虑destination的空间够不够。strcat追加拷贝,追加到目标空间后面,目标空间必须足够大,能容纳下源字符串的内容。strcmp比较两个字符串的大小,一个字符一个字符比较,按ASCLL码比较。strlen函数返回的是在字符串中’\0’前面出现的字符的个数。第一个字符串大于第二个字符串,则返回大于0的数字。第一个字符串小于第二个字符串,则返回小于0的数字。第一个字符串等于第二个字符串,则返回0。
2023-07-14 00:00:03 1661 1
原创 关于数组指针与指针数组
会把常量字符串存储到单独的一个内存区域,当 几个指针。指向同一个字符串的时候,他们实际会指向同一块内存。但是用相同的常量字符串去初始化。不同的数组的时候就会开辟出不同的内存块。指向的是一个同一个常量字符串。二、指针数组与数组指针。
2023-07-12 00:49:44 71 1
原创 浮点型的储存方式
如果E为11位,它的取值范围为0~2047。但是,我们知道,科学计数法是可以出现负数的,所以IEEE 754规定,存入内存的E是真实值加上一个中间数,对于8位的E,中间数是127,对于11位的E,中间数是1023。比如,26 的E是6,所以保存为32位浮点数时,必须保存为6+127=133,即10000101。然后将101 1000.1101化成上述公式M的形式,其范围是[1,2),所以将小数点左移6位,得到1.0110001101×26(这里不懂的话对比十进制,小数点左移一位乘以10,二进制则乘以2)。
2023-07-11 12:35:44 433
原创 C语言中易错题
此题问cnt输出为多少,并不是问你最后fib得多少,实际上是说共有几次递归;do while循环语句是先使用在去判断,while后的()里面为判断语句,非0均为正确,继续循环,所以为陷入无限循环i++,先使用后++,所以j=1,i=2+ - * / 的 优先级大于赋值运算符,所以先+ - * / 在赋值运算 *=这道题非常异错,此时全局变量a=1,不管a在test()里怎么改变,不会影响a,只会影响test()的值,而a出了test函数,依旧全局变量 a=1。
2023-04-23 18:32:55 113
原创 关于整型提升与算术运算
整形提升针对的类型小于整形的char,shortchar占用1字节空间,short占用2字节空间,在运算时都会提升为占用4个字节的int类型所以C的整型算术运算总是至少以缺省整型类型的精度来进行的。换而言之整形算术运算都至少以int类型计算的-1的原码为10000000 00000000 00000000 00000001反码为111111111 111111111 111111111 111111110补码为111111111 111111111 111111111 111111111但是要改为char类
2023-04-22 22:18:33 130
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人