c语言进阶知识简介
文章平均质量分 93
起床写代码啦!
一个菜鸡
展开
-
C语言——通讯录的实现
此时,在删除信息的代码中,应该从编号为8进行遍历,并且用编号为9的信息覆盖编号为8的信息,然后,循环继续进行,让编号为10的信息覆盖编号为9的信息,所以,按照这个步骤,最后应该是编号为19的信息覆盖编号为18的信息,也就是循环11次。在删除某个个人信息时,分了两步,第一步时先通过输入想要删除的人的姓名,找到他在结构体中所对应的编号,但是,不光对于删除信息,在下面的查找信息,改变信息都需要找到这个编号,所以,为了简化代码,应该将寻找个人信息对应的编号这一步骤封装成一个函数。原创 2023-07-20 14:51:13 · 341 阅读 · 18 评论 -
C进阶——自定义类型
所以,成员i的对齐位置跟在成员c的后面。这是因为,上面的代码不能再按照整型去计算,要按照位段去计算,这里的位,指的就是二进制位,冒号‘:’后面的数字,代表了让这个变量占几个二进制位的空间,例如上面的例子中,a,b,c,d,所占的二进制位的数量分别是:2,5,10,30个。a大小是3比特位,b是4比特位,当a,b的内存分配结束后,此时,红色区域只剩1比特位大小的空间,对于大小为5比特位的成员c,还是存在上面的问题,即是先用剩余空间分配,再到新空间分配,还是剩余的空间直接不用,去新空间直接分配。原创 2023-07-18 15:32:18 · 92 阅读 · 16 评论 -
C语言——字符串和内存函数
strcat、strcmp、strstr、strlen、strtok、strcpy等函数原理及模拟实现原创 2023-07-14 14:10:58 · 270 阅读 · 22 评论 -
C语言进阶——3(对于数组名的进一步理解)
依旧和题目二、题目三相似,此时的a表示数组首元素的地址,且a的类型是Int*,在前面的文章中说过,对于整型类型的指针,加减整数n表示跳过n*4的字节的内容,所以,这里是跳过4个字节大小的内容,而Int类型的内容本来大小就是四个字节,所以a+1表示数组中,第二个元素的地址,此时,打印的结果是8字节。对于这个题目需要注意,a的前面有一个&符号,&+数组名的组合,代表了取出整个数组的地址,但是,就算是整个数组的地址,本质也是个地址,地址的大小只会根据计算机地址线的不同而改变,所以,题目的 打印结果是8个字节。原创 2023-07-12 16:21:28 · 85 阅读 · 6 评论 -
qsort对不同数据类型的排序、及模拟qsort函数实现
对于上述代码,和冒泡排序不一样的就在于第二个for循环之后,if语句的内容中,因为上面说到,qsort函数为了满足对不同的数据类型进行排序,所以选择void*型指针,但是对于不同的元素类型,他们所占的空间(或者说他们自身的大小)是不一样的,这就导致了,不同元素的情况下,一个元素和他们后面的一个元素,相隔的空间大小是不同的。上述代码中,在结构体中填入了四个人名,这四个人名的首字符分别是:z l w z,所以,进行排序后,排序的结果应该是按照这些字母的大小来进行升序排序。因为单个字符可以看作长度为1的字符串。原创 2023-07-10 22:44:55 · 283 阅读 · 8 评论 -
C语言——冒泡排序和qsort排序
这里需要注意的是,前面提到过,qsort可以对任意类型的数据进行排序,所以,qsort函数对于参数的类型的选择,使用void*进行表示,void*可以匹配任意类型的数据,但是,因为void*可以匹配任意类型的数据,所以在前面提到的不同类型指针的特殊性质,即指针和整数的加减以及指针的访问权限在void*指针上均不满足。所以,在书写比较函数的代码时,需要进一步将void*类型的数据,强制转换成被排序的数组的数据类型,例如,上面对int型的数据进行排序,则在书写比较函数时,需要将void*转为int*类型。原创 2023-07-09 23:49:57 · 190 阅读 · 5 评论 -
指针——(进阶)
对于上面列举的二维数组,可以认为,二维数组=一维数组的数组,也就是说,可以把二位数组中的每个{}所包含的值,均看做一个数组的元素,那么,{1,2,3,4}这个值,便可以看作二维数组的首元素,同时,二维数组和一维数组一样,也满足数组的首元素 = 数组的地址,所以,通过上面的分析可以得出一个结论,即,二维数组的首元素 = 二维数组第一行的地址(第一行{1,2,3,4}被看作一个元素)。文章第二部分介绍了指针数组——存放指针的数组、数组指针——指向数组的指针,为了更清晰的区别二者,下面将会给出一个例子进行说明。原创 2023-07-07 15:01:19 · 84 阅读 · 6 评论