- 博客(35)
- 收藏
- 关注
原创 结构体内存对齐与位段
1.结构体的第一个成员对齐到结构体变量的起始位置(偏移量为0处)。2.其它成员要对齐到对齐数的整数倍的地址处(编译器默认对齐数(vs默认为8,gcc没有默认只看变量)与该成员变量所占字节的较小值。3.结构体总大小为最大对齐数的整数倍4.如果嵌套了结构,则该嵌套的结构体的最大对齐数是自己成员中最大对齐数的那一个的整数倍处。第3条规则就改为了还要看结构体里面的成员的最大对齐数,和非嵌套的那部分的成员,所有成员中对齐数最大的那一个1.char c1;char c2;int n;
2024-09-30 22:43:42 834
原创 在一个字符串中寻找第一个只出现一次的字符
整个代码时间复杂度为o(n),空间复杂度需要考虑你的c_count的初始化方式,在这个代码中可以认为是o(1)简单讲解一下这个代码,
2024-09-30 19:20:04 223
原创 浮点数在内存中的存储
首先举个例子说明这个公式怎么用5.5(十进制)转化为2进制为 101.1(0.5=1/2=2^-1)用科学计数法表示这个数为1.011*2^2为了提高精度,会默认的把M中的首位的1去除,以达到提高一个bit的精度。.因为蓝色框中存储的是无符号的整型,但是实际存储的时候可能有负数,所以规定先加127在放入。3.M少的部分用0补充。
2024-09-27 15:34:01 755
原创 整数在内存中的存储(c语言)
当一个数的时候,不存在原码反码补码的差别,也就是一样的;当一个数的时候,以-1为例子,对这个过程进行讲解。1000 0000 0000 0000 0000 0000 0000 0001 原码(实际我们看到的)1111 1111 1111 1111 1111 1111 1111 1110 反码,(符号位不变也就是最左边的那个,其余的把原码中为0的变为1,1的变为0)
2024-09-26 20:07:33 1070
原创 str函数的模拟(包括strn函数的模拟)
/这里只用最难的方法if (*s1) {elsereturn 0;这里使用了的方法,如果需要看指针,数组用计数器count的方法看之前发的文章string函数的模拟即可;讲解一下这个函数的作用:这个函数能,直到找到'\0',如果找不到就会生成随机数。注意点:这些str函数返回值一般都是unsigned int 类型,但是我的模拟函数都是返回int型,如果用库函数的话,做减法要注意不会出现负值。
2024-09-24 16:07:45 896
原创 c——通讯录的模拟
for (j = i;printf("请开始输入要添加的信息(名字,年龄,性别,电话)\n");printf("通讯录中没有找到该用户\n");printf("通讯录中存在该用户\n");printf("通讯录中存在该用户\n");printf("通讯录中存在该用户\n");printf("该用户不在通讯录中\n");printf("请输入你要查找的用户\n");printf("不存在该用户\n");printf("通讯录暂时还没有用户\n");printf("通讯录中暂时没有用户\n");
2024-04-16 14:59:22 1551
原创 c-结构体内存对齐,位段
首先就是解释为什么要这么处理:处理器在处理已经对齐的变量时只需要一次就能够读取,而没对齐时可能就需要将该变量读取两次,(既4个字节,读了前三个字节,还剩一个字节就需要再读取一次)2.从第二个开始每一个存放时都要放在偏移量为(默认值与字节数较小值)的整数倍处。为了减小损耗一般在没有固定要求的情况下把小字节的变量放前面进行定义。3.最后得出来的那个值要是(几个变量字节最大的那个)的整数倍处。0~7加起来刚好8个是4的整数倍,所以不需要额外扩展一个空间。1.第一个直接放在偏移量为0的地方,不管是什么类型的变量。
2024-04-14 11:02:02 233
原创 c---内置函数模拟(memset,memcmp,memcpy,memmove)
assert(s1);return ret;return 1;return -1;return 0;else {return ret;return ret;
2024-04-12 18:10:13 348
原创 c语言字符串函数(模拟实现)
/真正的strlen是unsigned int。//能够判断为不为空指针。用递归的方式完成strlen。用指针的方法完成strlen。用数组的方法完成strlen。
2024-04-08 11:19:15 203
原创 c语言进阶之函数指针的使用(计算器的模拟,以及qsort函数的模拟)
void *的指针是不能直接解引用的,因为void相当于与个存放器,是为了方便存放(无具体类型的指针)在下面这个例子中作用体现得就很明显。//函数指针//这里的取地址符合是可以省略的。//*号是为了便于理解,其实是摆设。printf("请输入你要选择的运算1:加法,2乘法,3减法,4除法\n");printf("请输入你想选择的操作数\n");
2024-04-02 20:29:10 768
原创 c语言入门之初级指针个人理解
/通过这个例子也能知道*(arr+i)=arr[i] *(arr[i]+j)这个移动的是列不是移动行。//下面这个例子是c语言指针比较的标准,可以后越界不可前越界比较,(有的编译器会报错)int* parr[3] = { arr1,arr2,arr3 };//用指针构造2维数组。
2024-03-20 15:05:26 224 1
原创 c语言入门之不创建新的参数完成ab值的交换
/0000001//实现过程 (左边) 原理 a^a=0000000 a^b^a=a^a^b=b。a = a ^ b;//相同为0,相异为1(有结合律)
2024-03-19 16:16:15 105
原创 c语言入门之无重复字符长度
for (j = 0;j < len-1;j++) {count++;else {count = 0;return 0;
2024-03-14 22:25:38 322 1
原创 Manim-基础入门图形,坐标轴
axis_config={"stroke_color":RED}#这个是设置xy轴颜色用的。axis_config={"stroke_color":RED}#这个是设置xy轴颜色用的。axis_config={"stroke_color":RED}#这个是设置xy轴颜色用的。axis.add_numbers([-1,2])#这个不是一个区间,是两个点,表示展示两个点的刻度值。# self.add(axes.get_axis_labels())#获取x,y。path_arc=-4.39#拉直线为弧线。
2024-03-06 14:24:41 641
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人