随笔分类 - C
C
摘要:1、C语言malloc,calloc,realloc 这些个alloc是动态分配内存空间的常用函数。 相比让编译器分配静态的内存空间,动态分配内存空间是非常有必要的。如在嵌入式开发时,静态分配的空间必须有足够的空间,我申请了100字节,可能实际使用就只有80个,剩下的20个就浪费了。好处是无需程序员
阅读全文
摘要:0 Xcode 10.1,编译器clang GNU14++ 1、整型数组的初始化 栈初始化 2、字符串的初始化 栈初始化 和整型的初始化基本一致,会调用构造函数 3、数组的默认初始化 如果不明确指出初始化列表,那么基本类型不会被初始化(全局变量和静态变量除外),所有内存都是脏数据;且自定义的类类型会
阅读全文
摘要:```C #ifndef LINKSTACK_H_INCLUDED #define LINKSTACK_H_INCLUDED #include #include //链式栈的结点 typedef struct LINKNODE { struct LINKNODE *next; }LinkNode; //链式栈 typedef struct LINKSTACK { Lin...
阅读全文
摘要:```C /* * SeqStack.h * * Created on: 2019年8月1日 * Author: Administrator */ #ifndef SEQSTACK_H_ #define SEQSTACK_H_ //数组去模拟栈的顺序存储, 有数组的后面模拟栈顶 ,避免数据频繁移动 #define MAX_SIZE 1024 #define SEQ_S...
阅读全文
摘要:```C /* * Josephus.c * * Created on: 2019年7月25日 * Author: Administrator */ #include "CycleLinkList.h" #include #include #include #define M 8 #define N 3 typedef struct MYNUM { CircleLinkNode node; int
阅读全文
摘要:按照单链表的设计,稍加改动。和单向链表不一样的地方,头节点不指向NULL,而是指向自己head 循环链表的判满 1)判断next是不是头结点,2)判断size
阅读全文
摘要:C / mian.c Created on: 2019年7月22日 Author: Administrator / include "DynamicArray.h" include include include void test01(){ //初始化动态数组 Dynamic_Array arr
阅读全文
摘要:```C /* * LinkList.h * * Created on: 2019年7月20日 * Author: Administrator */ #ifndef SRC_LINKLIST_H_ #define SRC_LINKLIST_H_ #include #include //链表节点 typedef struct LINKNODE { void *data...
阅读全文
摘要:```C /* * LinkList.h * * Created on: 2019年7月20日 * Author: Administrator */ #ifndef SRC_LINKLIST_H_ #define SRC_LINKLIST_H_ #include #include /** * 企业链表的实现 */ //链表小结点 和普通链表相比较 没有数据...
阅读全文
摘要:1、双链表 1.1 双向链表的声明 在一个双链表中,每个节点都包含两个指针 指向前一个节点的指针和指向后一个节点的指针. 声明 根节点的fwd字段指向链表的第1个节点,根节点的bwd字段指向链表的最后一个节点.如果链表为空,这两个字段都为NULL.链表的第1个节点的bwd 字段和最后一个节点的 fw
阅读全文
摘要:动态内存分配 1.1 为什么使用动态内存分配 直接声明数组的方式的缺点: 1) 声明数组必须指定长度限制.无法处理超过声明长度的数组. 2) 如果声明更大的常量来弥补第一个缺点,会造成更多的内存浪费. 3)如果输入数组的数据超过来数组的容纳范围,程序必须以一种合理的方式作出响应.但是程序员一般不会做
阅读全文
摘要:1、链表 链表(linked list)即使是一些包含数据的独立数据结构的(Node)集合. 链表中的每个节点通过链或指针链接在一起. 程序通过指针访问链表中的节点. 节点通常是动态分配的,但也有由节点数组构建的链表(即使这样,程序也是通过指针来遍历链表). 1.1 单链表 单链表中,每个节点包含一
阅读全文
摘要:1、结构 1.1 结构声明 在声明结构时,必须列出它包含的所有成员.这个列表包括每个成员的类型和名称. struct tag {member list} variable list; 例如 注意:这两个声明会被编译器当作两种截然不同的类型,即使他们的成员列表完全相同. 下面这跳语句是非法的 ~~z
阅读全文
摘要:1、字符串 C语言没有字符串数据类型,因为字符串以字符串常量的形式出现或存储于字符数组中. 字符串常量和适用于那些程序不会对他们进行修改的字符串. 所有其他字符串都必须存储于字符串数组或动态分配的内存中. 字符串是一个或多个字符,并且以一个位模式全0 的NUL字节结尾 头文件 string.h 包含
阅读全文
摘要:1.1 一维数组 一维数组的声明: int a[10]; 这里a就是一个数组. 数组a的类型就是一个指向整型的常量指针. 但是数组和指针是 不相同 的. 数组具有特定数量的元素,而指针只是一个标量值. 只有但数组名在表达式中使用时,编译器才会为它产生一个指针常量.(注意是指针常量,不是指针变量) 1
阅读全文
摘要:1、可变参数表是通过宏实现的 宏定义于stdarg.h头文件,它是标准库的一部分.这个头文件声明了一个类型var_list和三个宏 va_start、va_arg、va_end. 我们可以声明一个类型为va_list的变量,与这几个宏配合使用,访问参数的值. 参数列表在函数中用三点省略号(...).
阅读全文
摘要:1、递归 C通过运行时堆栈支持递归函数的实现. 递归函数就是直接或间接调用自身的函数. 一个小例子: 2、两个递归运用和用迭代优化的例子 尾递归:递归调用出现在函数的尾部,并且之后不再执行任何任务 尾递归可以方便的转换为迭代.由于递归是非常耗费内存的(每次函数调用都会在内存中分配空间),内存频繁的分
阅读全文
摘要:1、函数的定义 函数的定义就是函数体的实现. 语法: 类型 函数名( 形式参数 ) 代码块 函数返回类型和函数名分开写是代码风格的问题,现代语言如swift返回值在函数名和参数表的后面,这样使得某些工程工具追踪源代码时更容易查找函数名. K&RC 的旧式声明: int find_int(key, a
阅读全文
摘要:```C / 查找字符串 source 中 是否有指定的子串出现,如果有返回第一个匹配的字符 @param source 源 @param chars 目标 @return 返回值 / char find_char0(char const source, char const chars) { if
阅读全文