c语言学习
文章平均质量分 69
干饭小子
这个作者很懒,什么都没留下…
展开
-
文件IO过程
文件描述符是一个简单的整数,用以标明每一个 被 进程所打开的文件和socket. 通常0 1 2被标准输入、标准输出、标准错误(默stdin,stdout,stderror)认占用,然后从3开始依次递增。当一个进程成功打开一个文件,内核会返回一个文件描述符。linux操作系统通常给每个进程能打开的文件数量强加一个限制。通常系统默认限制是1024,即(0~1023)此限制可能会极大的影响性能,当所有的文件描述符用完之后之后,会导致新的连接服务被拒绝。原创 2022-09-05 17:10:07 · 348 阅读 · 0 评论 -
排序和复杂度
从右边开始,指针往右偏移,直到找到比39小的,然后将该数放到中心元素位置,然后左边指针开始向右偏移,找到比39大的,将该数放到右边指针停留的位置,然后右边指针再向左偏移,如此循环,将堆顶元素与末尾元素进行交换,使末尾元素最大,然后继续调整堆,再将堆顶元素与末尾元素交换,得到第二大元素,如此反复进行交换,重建,交换。任取待排序序列的一个元素作为中心元素(可以用第一个,最后一个,也可以是中间任何一个),习惯将其称为。4.此时,交换导致了子根[4,5,6]结构混乱,继续调整,[4,5,6]中6最大,交换4和6。原创 2022-09-04 22:01:37 · 2227 阅读 · 0 评论 -
链表、结构体和数组对比
1、结构体可以存不同类型的元素,而数组只能存同一类型2、结构体类型需要我们自已定义.数组是用别的类型加[元素个数]3、结构体内存分配方式很特别,使用对齐原则,不一定是所有元素的字节数和,而数组一定是所有元素的字节数和.4、结构体指针可以指针名->结构体元素名(取元素);数组不行5、结构体嵌套可以使用点语法逐级寻找,数组不能。原创 2022-08-23 18:22:28 · 1337 阅读 · 0 评论 -
结构体为何要进行对齐以及如何对齐
1. 平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能 在某些地址处取某些特定类型的数据,否则抛出硬件异常。2. 性能原因: 数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的 内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。总体来说:结构体的内存对齐是拿空间来换取时间的做法。优点是提高了可移植性和cpu性能。............原创 2022-08-14 19:41:52 · 2848 阅读 · 0 评论 -
指针、变量
1)寻址方式不同:普通变量采用直接寻址方式,只需要一次就可以从内存中取出需要的数据。而指针变量是间接寻址方式,且至少进行两次。值得注意的是,理论上,一维指针变量寻址两次,二维指针变量寻址三次…n维指针变量寻址n+1次,且n可以无限增加,但是实际上,不同的寻址方式比如两次寻址和三次寻址,是在设计之初就被编进指令集中的,指令码的限制使得大多数寻址控制在两到三次,也就是我们说的一维指针和二维指针,与其可类比的概念的有一维数组和二维数组,但它们又不完全相同,后续会接着说到。...原创 2022-08-08 15:09:37 · 304 阅读 · 1 评论 -
c语言使用一维数组实现杨辉三角
通常使用在实现杨辉三角时使用的时使用二维数组的方式,这种方式比较快捷,且比较好理解,但是使用二维数组浪费了大量的空间,又大概一般的空间未被使用。如果使用一维数组进行计算能大大提高空间利用率。首先我们定义一个函数用来计算任意行数杨辉三角需要使用到的数组长度。并且可以通过这个函数能够找到上一行杨辉三角的起始位置。在打印时也对每行需要空出来的长度做了处理,尽量保证打印出来的是一个三角形...原创 2022-08-07 21:54:22 · 1688 阅读 · 0 评论 -
scanf导致的无限循环
scanf需要获取一个数字,但是你给了一个字母,scanf获取之后发现不是我要的,就把字母又放回了缓冲,但是由于缓冲不是空的,scanf不会进入阻塞状态(就是等待用户输入)。在下一次循环时,发现缓冲有东西(其实还是上次放回的字母),再取,再放回,我还是不阻塞,执行下一条语句,如此循环,导致一直打印。代码:目标是想要获取一个数字,运行时输入了一个非数字字母。...原创 2022-08-07 13:15:22 · 479 阅读 · 1 评论 -
普通字符再scanf中的应用
分析:如果不用逗号分割而用空格,此时在输入数字1 2回车后触发刷新,1被前面的%d获取到,由于此时缓存不为空,所以程序不会等待你输入下一个字符,直接进入打印阶段,再循环到下一次,2又被第一个%d获取到,如此往复。如说输入一个数+逗号再回车,前面一个%d接受一个数,逗号被匹配到,后面一个%d发现没有数字了,只有一个\n,但是%d的职业操守是我不认\n和空格,我等,所以它会正常等待你的输入。如果有逗号分割,逗号被scanf中的逗号匹配,前面的字符被第一个%d获取,后面的字符被后一个%d获取。...原创 2022-08-07 13:06:29 · 246 阅读 · 0 评论 -
scanf中‘\n‘的用法和隐患
读到这篇文章的人90%的可能是遇到了输入字符后,回车没有预期的输出,连续回车都没用。这种情况可能是因为你在scanf中加了\n,而且加了不该加的地方。把代码里的\n删了或者再输入一个不是\n的字符再回车。下面来分析一下为什么会发生这种情况scanf不是直接从键盘获取数据的,scanf和键盘之间还存在一个媒介。当程序执行到scanf时,会从你的缓冲区读东西,如果缓冲区是空的,就进入阻塞状态。基于此点我们导论%c %d %s %f。......原创 2022-08-07 12:47:48 · 7932 阅读 · 6 评论 -
c 和 python语法 对比
让初学者更好的了解python和c原创 2022-07-27 21:52:56 · 1690 阅读 · 1 评论