- 博客(14)
- 收藏
- 关注
原创 动态内存详解
这里我们并没有直接用p,因为一旦空间调整失败返回NULL,把NULL赋给p,这样连20个字节的指针都无法找到。对于2,原有空间之后没有足够多的空间,在堆上找一个合适大小的连续空间来使用,这样是一个新内存地址。C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做『柔性数组』成员。2,数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。向内存申请一块连续可用的空间,并返回指向这块空间的指针。在不为NULL的情况下,这样就返回了新的地址。1,这种空间开辟大小是固定的。
2023-04-06 17:31:09
92
原创 静态通讯录详解
思路就是使用strcmp因为名字都是字符串,如果==0就返回i正好返回i的位置。查找联系人就简单许多,我们可以使用显示联系人代码去掉循环就可以查找联系人了。在此之前,我们要知道删除,查找我们都是需要找到联系人的位置。需要注意的是e1原本是void* 的,所以我们使用的时候需要把类型改为结构体也就是(PeoInfo*)这个sz-1是非常重要的,当del在4的时候就已经把5换到4了,所以删除的次数一定是-1的。提到排序我们就可以使用qsort函数,我们要注意的是里面的参数。当通讯录sz为0时一定是不能删除的。
2023-04-02 15:06:48
363
原创 结构体,位段,枚举,联合体详解
int x;int y;} p1;//声明类型的同时定义变量p1 struct Point p2;//定义结构体变量p2 //初始化:定义变量的同时赋初值。x , y };struct Stu //类型声明 {//名字 int age;//年龄 };//初始化 struct Node {int data;} n1 = {10 , {//结构体嵌套初始化 struct Node n2 = {20 , {//结构体嵌套初始化。
2023-03-28 17:01:32
84
原创 字符函数详解
因为void* 这种指针不能直接解引用和±运算。但是如果运用int-4字节,如果num = 7,显然int是不行的,char-一个字节,更为合适。就等于20,就完成了从后向前进行覆盖,然后num–,num变成18,以此类推。我们使用menmove是没有问题的。我们可以2和3从后向前,1从前向后。这个对于memcpy是不能实现的。memcmp - 比较两个内存块。memmove - 移动内存块。memcpy - 复制内存块。memcpy - 复制内存块。时num等于19,这样。为什么是char*?
2023-03-23 17:45:35
67
原创 字符串函数详解
首先我们要知道最后的输出是第一次相同的地址开始,所以我们不能用str1 和str2进行遍历,而且str1的变量需要多一个,用来记第一次相同的地址。已经找完了,况且已经找到字符串。然后再一次进入循环,pc只有当p1与p2不相等时才加加,所以遍历是p1来完成的,那p1 = pc就能很好的解决,当我们p1 == p2时,p1++,p2++。strlen返回的是字符串中’\0’之前出现的字符个数且不包括’\0’先找到需要追加字符串的’\0’, 然后再把追加的字符串一 一追加进去。= ‘\0’,这是大致的思路。
2023-03-21 17:22:24
52
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人