C语言
不对C语言进行详细介绍,只对其中的疑难杂症进行记录
后知~
这个作者很懒,什么都没留下…
展开
-
详细总结C语言指针
前言第一次详细的总结关于C指针的文章,指针对于C来说,是其灵魂所在。在工作与不断的学习过程中,越发觉得指针的重要性.......(词穷)1、什么是指针?“指针就是地址”,相信大家都知道这个答案。然而能在代码中灵活运用指针的人并不是绝大多数。相信对于初学者或者是对C语言指针掌握得不是很好的“道友们”来说,同一个需求一样能实现得很好,但是你的代码可能只有你自己可以进行维护,并且出了BUG,没人能帮你,只能自己“渡劫”。毕竟自己造的孽,只能自己来承受。 /*简述学C的过程对指针的...原创 2020-11-13 21:06:58 · 329 阅读 · 0 评论 -
排序算法之快速排序(C语言)
一、原理讲解快速排序的核心思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。简单的说法,就是设置一个基准,将无序数组的数据分隔成两部分,基准左边的数据都小于基准,基准右边的数据都大于基准。然后不断设置基准与参与排序的数据个数进行排序,...原创 2020-03-28 21:10:27 · 1665 阅读 · 0 评论 -
排序算法之插入排序(C语言)
一、原理讲解插入排序算法核心思想:将无序数组中的元素,根据其值的大小,插入有序子数组中。类似于我们打扑克牌的时候,一边摸牌,一遍摆牌。遇到小的直接插到牌首,遇到大的直接插入牌尾,遇到中间的则在中间空出一个位置,将其插入。假定有一个无序数组arr[10] = {10, 1, 0, 44, 5, 6, 77, 8, 10, 99};第一步,直接将无序数组的第一个元素划分到有序子数组当中去...原创 2020-03-28 16:03:12 · 3750 阅读 · 0 评论 -
排序算法之选择排序(C语言)
一、原理讲解选择排序的算法核心为:选择无序数组中最小/最大的数据,与无序数组中第一个/最后一个数据进行交换。这里需要注意,每轮交换之后,会将数组分为两部分,一部分为有序,一部分为无序。假定有个无序数组:arr[10] = {9, 2, 0, 31, 5, 6, 11, 8, 10, 33};下图为每轮排序后的结果:注意,该图是每轮交换后的结果,交换前的看上一轮,其中第0轮为原始...原创 2020-03-28 12:25:21 · 305 阅读 · 0 评论 -
排序算法之冒泡排序(C语言)
一、原理讲解所谓排序,就是将一串无序数据,按照其中某个或某些关键的大小,递增或递减排列起来的操作,排序算法,就是如何使得记录按照要求排列的方法。下面对冒泡排序进行详解。这里我们先对冒泡二字进行初步的说明。冒泡指的就是水下的气泡,从水底向上冒的过程,这气泡在上升的过程,气泡在压力的作用下,逐渐表大。如下图所示:冒泡算法实现过程就如这冒泡的过程,算法核心是相邻的两个数进行比较,将大的/...原创 2020-03-28 11:00:45 · 406 阅读 · 0 评论 -
C语言之随记
该文无主要介绍主旨,简单介绍一些博主在复习C语言中发现的一些易错点。一、memset函数的应用memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。#include <string.h> //需要添加的C库头文件void *memse...原创 2020-03-02 21:05:12 · 177 阅读 · 0 评论 -
C语言之二叉树(二)
二叉树常见操作一、遍历二叉树二叉树的存储采用的是链式存储方式(链表)但是其链数是不确定的,所以我们不可直接采用链表的遍历方法。在这里介绍一下二叉树的常见遍历方法。遍历二叉树的顺序存在以下三种顺序、六种情况。1.先序遍历,TLR(根左右),TRL(根右左)。2.中序遍历,LTR(...原创 2020-01-25 20:34:37 · 167 阅读 · 0 评论 -
C语言之二叉树(一)
一、树的定义树是由n(n >= 0)个节点组成的有限集合。如果n = 0,则称之为空树。如下图所示1.A为根节点,它只有直接后驱,但是没有直接前驱。2.除根以外的其他节点划分为m(m >= 0)个互不相交的有限集合T0,T1..........,TN,每个集合又是一棵树,并称之为根的子树。每棵子树的节点仅有一个直接前驱,但可以有0个或者多个直接后继。途中B和C就是A...原创 2020-01-19 16:57:48 · 527 阅读 · 0 评论 -
C语言之双向链表
一、双向链表在上一篇文章我们已经介绍了单向链表,了解了其具体构造及其基本操作,我们也能发现其部分缺点,查找数据和删除数据的时候都必须从链表头指针开始挨个遍历,直到找到目标节点。双向链表的双向指的的就是我们遍历链表的时候可以正序遍历也可逆序遍历,链表内的节点不止与下一个节点有关系,与上一个节点同样有关系。具有两个方向。1.1双向链表的构造如下图所示根据图我们可以看到,双向链表和单向链...原创 2020-01-10 17:31:35 · 1356 阅读 · 8 评论 -
C语言之单向链表
一、链表链表是一种常见的数据结构,它可以动态的进行存储分配,根据需要开辟内存单元与释放内存单元,链表中的元素通常由两部份组成:数据域和指针域。数据域用于存储数据,指针域用于节点的连接。链表结构如下图所示:链表第一个节点是头指针,每个节点都都包含这数据域与指针域,每个节点与其下一个节点都是通过指针域进行相连的,且最后一个节点的指针域指向NULL。二、单向链表基本操作首先我们看...原创 2020-01-09 12:34:54 · 288 阅读 · 0 评论 -
C语言之结构体中“ . ”和“ -> ”的区别
相同点:两个操作符都是二元操作符,且其有操作符是结构体成员的名称。不同点:“ . ”操作符左边的操作数是一个“结构体”的表达式,而“ -> ”操作符左边的操作数是一个指向结构体的指针。例:typedef struct { int num; float score; char name[10];}STUDENT;STUDENT temp;STUD...原创 2020-01-09 10:16:21 · 5824 阅读 · 0 评论 -
C语言之内存管理与函数返回值的一些小问题
一、内存管理在C语言中,定义了四个内存区间:代码区、全局变量与静态变量区、局部变量区即栈区、动态存储区即堆区。1.代码区:代码区内存放程序代码,属性为只读的。2.全局变量与静态变量区:该区域也称之为静态存储区域。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。主要保存全局变量,静态变量和字符串常量,分配在这个区域中的变量,只有当程序结束的时候才会将内存释放。因此,...原创 2020-01-05 15:20:48 · 629 阅读 · 0 评论 -
C语言之函数的参数传递
本文主要介绍C语言参数的三种传递方式,以及个人遇到的一些问题及解决方法C语言中,传递参数的主要方式有三种: 1.值传递方式 2.地址传递方式 3.引用传递一、值传递值传递,指的是将实参的值复制并赋值给形参。这里需要注意的地方是,实参和形参的存储单元并不相同,实参的存储单元由实参的定义方式决定,而形参的存储单元则是栈,对应的存储单元在函数调...原创 2020-01-04 20:36:40 · 4974 阅读 · 0 评论 -
C语言之条件编译的使用
一、本文主要介绍C语言中关于条件编译相关的预处理命令,包含#define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif。#define 定义一个预处理宏 #undef 取消一个预处理宏 #ifdef 判断某个预处理宏是否被定义,若定义则编译后续程序段 #ifndef 判断某个预处理宏是否没有被定义,若没定义则编译后...原创 2020-01-02 12:16:01 · 508 阅读 · 1 评论