1.双链表 1.1 双向链表的声明 在一个双链表中,每个节点都包含两个指针--指向前一个节点的指针和指向后一个节点的指针. 声明 typedef struct NODE { struct NODE *fwd; struct NODE *bwd; int value; } Node; 根节点的fwd字段指向链表的第1个节点,根节点的bwd字段指向链表的最后一个节点.如果链表为空,这两个字段都为NULL.链表的第1个节点的bwd 字段和最后一个节点的 fwd 字段都为 NULL. 在一个有序的链表中…
1.结构 1.1 结构声明 在声明结构时,必须列出它包含的所有成员.这个列表包括每个成员的类型和名称. struct tag {member-list} variable-list; 例如 //A struct { int a; char b; float c; } x; //B struct { int a; char b; float c; } y[20], *z; 注意:这两个声明会被编译器当作两种截然不同的类型,即使他们的成员列表完全相同. 下面这跳语句是非法的 z = &x; 可以利用…
该类容摘抄自以下链接,为学习之后的记录,不是鄙人原创. 学习链接:https://blog.csdn.net/a2013126370/article/details/78230890 typedef struct                {                    ...                    ...                }POINT,*POINT_P;  POINT为结构名,这个名字主要是为了在结构体中包含自己为成员变量的时候有用         …
---恢复内容开始--- You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. You may assume th…
动态内存分配 1.1 为什么使用动态内存分配 直接声明数组的方式的缺点: 1) 声明数组必须指定长度限制.无法处理超过声明长度的数组. 2) 如果声明更大的常量来弥补第一个缺点,会造成更多的内存浪费. 3)如果输入数组的数据超过来数组的容纳范围,程序必须以一种合理的方式作出响应.但是程序员一般不会做这个判断. 1.2 malloc 和 free malloc 和 free 分别用于执行动态分配内存和释放. stdlib.h 中声明来这两个函数的原型 void malloc( size_t siz…
1.字符串 C语言没有字符串数据类型,因为字符串以字符串常量的形式出现或存储于字符数组中. 字符串常量和适用于那些程序不会对他们进行修改的字符串. 所有其他字符串都必须存储于字符串数组或动态分配的内存中. 字符串是一个或多个字符,并且以一个位模式全0 的NUL字节结尾 头文件 string.h 包含了使用字符串函数所需的原型和声明. 2.字符串长度 用库函数 strlen 计算字符串长度 size_t strlen(char const *string); size_t 是一个无符号整型,在st…
1.函数的定义 函数的定义就是函数体的实现. 语法: 类型 函数名(形式参数) 代码块 函数返回类型和函数名分开写是代码风格的问题,现代语言如swift返回值在函数名和参数表的后面,这样使得某些工程工具追踪源代码时更容易查找函数名. K&RC 的旧式声明: int * find_int(key, array, array_len) int key; int array[]; int array_len; { } 为了兼容一些旧的编译器,C标准保留了这种声明格式 2.函数的声明 2.1 函数原型…
1.可变参数表是通过宏实现的 宏定义于stdarg.h头文件,它是标准库的一部分.这个头文件声明了一个类型var_list和三个宏--va_start.va_arg.va_end. 我们可以声明一个类型为va_list的变量,与这几个宏配合使用,访问参数的值. 参数列表在函数中用三点省略号(...).它表示此处可能传递数量和类型未定的参数.函数原型和函数的定义都要这样做. 函数中要声明一个名叫 va_arg 的变量,它用于访问参数列表的未定部分.这个变量通过调用va_start来初始化.它的第一…
12.3 重新编写12.7,使用头和尾指针分别以一个单独的指针传递给函数,而不是作为一个节点的一部分 #include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 //指针fwd指向前一个节点,bwd指向后一个节点 typedef struct NODE { struct NODE *fwd; struct NODE *bwd; int value; } Node; /*传入指向 头部和尾部节点的指针 的…
定义结构体后整体赋值时发生错误 typedef struct NODE { struct NODE *fwd; struct NODE *bwd; int value; } Node; //声明变量 Node first; first = {NULL, &second, 4}; 错误: error: expected expression 之所以不行是,{}内容被当做语句块了,c语言允许直接对结构体初始化,或者在赋值的时候加上类型说明,或者是逐一赋值. 初始化赋值: typedef struct…