摘要:
错误报告 errno errno定义在<errno.h>头文件中,外部变量errno保存库程序中实现定义的错误码,通常被定义为errno.h中以E开头的宏,所有错误码都是正整数。 在linux中使用c语言编程时,errno很有用的。他可以把最后一次调用c的方法的错误代码保留。但是如果最后一次成功的调 阅读全文
摘要:
#error #error指令使预处理器发出一条错误消息,然后停止执行预处理。#error 一般形式为#error info,如#error MFC requires C++ compilation。 #line #line指令用于重新设定当前由__FILE__和__LINE__宏指定的源文件名字和 阅读全文
摘要:
条件编译 一般情况下,在进行编译时对源程序中的每一行都要编译,但是有时希望程序中某一部分内容只在满足一定条件时才进行编译,如果不满足这个条件,就不编译这部分内容,这就是条件编译。 条件编译主要是进行编译时进行有选择的挑选,注释掉一些指定的代码,以达到多个版本控制、防止对文件重复包含的功能。#if,# 阅读全文
摘要:
预处理器在源码编译之前进行的一些文本性质的操作,它的主要任务包括删除注释,插入被#include指令包含的文件内容,定义和替换由#define指令定义的符号以及确定代码的部分内容是否应该根据一些条件编译指令进行编译。 预定义符号 __DATE__,字符串常量类型,表示当前所在源文件的编译日期,输出格 阅读全文
摘要:
联合体 当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union)。 它的所有成员相对于基地址的偏移量都为0。 此结构空间要大到足够容纳最"宽"的成员。 其对齐方式要适合其中所有的成员。 联合的初始化 联合变量初始化时,这个初始值必须是联合的第1个成员的类型,而且必须是位于一对花 阅读全文
摘要:
位段(bit-field)是以位为单位来定义结构体(或联合体)中的成员变量所占的空间。含有位段的结构体(联合体)称为位段结构。采用位段结构既能够节省空间,又方便于操作。 位段的定义格式为: type [var]: digits 其中type只能为int,unsigned int,signed int 阅读全文
摘要:
结构的初始化 结构的初始化与数组的初始化类似,一个位于一对花括号内部、由逗号分隔的初始值列表可用于结构各个成员的初始化。这些值根据结果成员列表写出。如果初始化列表的值不够,剩余的结构成员将使用缺省的值进行初始化。 例如: 结构体的存储分配 考虑下面的结构: 如果某个机器的整型值长度为4个字节,并且它 阅读全文
摘要:
结构 聚合类型能够同时存储超过一个的单独数据,C提供了两种类型的聚合数据类型,数组和结构。数组是相同类型的元素的集合,它的每个元素是通过下标引用或指针间接访问来选择的。结构也是一些值的集合,这些值称为它的成员。但一个结构的各个成员可能具有不同的类型。 数组元素可以通过下标来访问,这是因为数组元素的长 阅读全文
摘要:
字符串函数在处理字符串的时候,遇到NUL就会停止,但是非字符串中有很多包含NUL的情况,那个就用到了上面的函数了。memcpy 实现的就是将 src 的数据 length 个复制到 dst 中,同时如果是整型或浮点数组,那么也不用进行强制转换,因为函数的参数是void的类型指针,所有类型的指针都可以 阅读全文
摘要:
字符分类相关函数 ctype.h提供了如下字符处理函数; 字符转换 如果传入的参数不需要进行操作或无法进行操作,不进行修改参数直接返回。 阅读全文
摘要:
strerror 这个函数是 string.h 的头文件中定义的 它的函数原型是: 这个函数的参数是一个外部整型变量 errno ,在你调用函数出现错误的时候就会通过 errno 这个变量作为 strerror 的参数,并返回一个指向描述错误的字符串的指针。 输出: 阅读全文
摘要:
查找一个字符 strchr和strrchr 函数是 string.h 的头文件中定义的 它们的函数原型是 : strchr 功能是返回字符第一次出现在字符串中的位置,strrchr 的功能是返回最后一次出现字符串中的位置。如果不存在返回NULL指针。 查找任何几个字符 strpbrk 这个函数是 s 阅读全文
摘要:
字符串就是一串零个或多个字符,并且以一个位模式为全0的NULL字节结尾,因此,字符串所包含的字符内部不能出现NULL,NULL是字符串的终止符,但并不是字符串的一部分,所以字符串的长度不包含NULL。 给字符串赋初值 memset函数把s所指的内存地址开始的n个字节都填充为c的值。 例如使用mall 阅读全文
摘要:
指针数组 []优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。 注意: 执行p+1,则p指向下一个数组元素。 如要将二维数组赋给一指针数组: 这里int *p[3] 表示一个一维数组内存放着三个指针变量,分别是p[0]、p[1]、p[2],所以要分 阅读全文
摘要:
存储顺序 在C语言中,多维数组的元素存储顺序是按照最右边的下标率先变化的原则,称为行主序。例如:a[3][6] 元素的下标值分别为:0,0 0,1 0,2 0,3 0,4 0,5 1,0 1,1 1,2 1,3 1,4 1,5 2,0 2,1 2,2 2,3 2,4 2,5 数组名 一维数组名的值是 阅读全文
摘要:
初始化 给数组赋值的方法除了用赋值语句对数组元素逐个赋值外, 还可采用初始化赋值和动态赋值的方法。数组初始化赋值是指在数组定义时给数组元素赋予初值。数组初始化是在编译阶段进行的。这样将减少运行时间,提高效率。初始化赋值的一般形式为:类型说明符 数组名[常量表达式] = { 值, 值……值 };其中在 阅读全文
摘要:
数组和指针 声明一个数组时,编译器将根据声明所指定的元素数量为为数组保留内存空间,然后再创建数组名,它的值是一个常量,指向这段空间的起始位置。 声明一个指针变量时,编译器只为指针本身保留内存空间,它并不为任何整型值分配内存空间。而且,指针变量并未被初始化为指向任何现有的内存空间,如果它是一个自动变量 阅读全文
摘要:
C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。 数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。 数组名 几乎在所有使用数组名的表达式中,数组名的值是一个指针常量,也就是数组第一个元素的地址,它的类型取决于数组元素的类型,如果它们是int型,那么数组名的类 阅读全文
摘要:
C通过运行时堆栈支持递归函数的实现,递归函数就是直接或者间接调用自身的函数。 递归函数追踪 追踪递归函数执行过程的关键是理解函数中所声明的变量是如何存储的:当函数被调用时,它的变量的空间创建于运行时堆栈上,以前调用的函数的变量扔保留在堆栈上,但它们被新函数的变量所覆盖,因此不能被访问。 递归函数每进 阅读全文
摘要:
函数调用 创建 C 函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。 当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序。 调用函数时,传递所需参数,如果函数返回一个值,则可以存储 阅读全文