表达式
表达式C言语中分为常量表达式,算术表达式,联系表达式,逻辑表达式,赋值表达式,逗号表达式和复合表达式etc。表达式能够分为左值和右值
左值(ell-value)能够出现在赋值运算符的左面或许右边,变量便是一个左值表达式
右值(are-value)只能出现在赋值运算符的右边,数字字面值便是一个右值表达式。
句子
句子是C言语用于表达指令逻辑语法结构,首要分为表达式句子,句子块,空句子,操控句子和特别句子
变量
从言语的视点看,变量是一个左值,能够放在赋值运算符的左面承受一个值或许是右边用来给其他变量赋值,一起,变量也是一个表达式,这个表达式的值便是变量的值。此外,变量也能够从程序的实质来了解,关于任何一个问题及其处理方案,都要用 一组数据 和 这组数据的改变 来描绘,描绘好了就能够用计算机处理,描绘不了的计算机也处理不了。变量便是用来表明一组类似的类似数据的其间一种办法,是一切现代程序设计言语的根底。
数据类型: C言语中,任何数据皆有其类型,就像生果能够被划分为苹果、橘子etc
常量:值不能更改的量,即柜子上一个上锁的抽屉,里边存了什么便是什么,你知道,但你改不了
变量:值能够更改的量,即似柜子上一个没锁的抽屉,今日用来放小苹果,明日放个大苹果
常量的类型:界说常量时指定的这块内存寄存的数据类型,即上锁的抽屉里存的到底是苹果仍是橘子
常量的地址:存储该常量的内存区域的第一个byte的地址,即上锁抽屉的编号
变量的类型:界说变量时指定的这个变量里边存储的数据类型,即没锁的抽屉专门用来放苹果仍是放橘子
变量的地址:变量用来存储数据的那块内存的首地址,即没锁抽屉的编号,因为每个地址在内存中都是仅有的,所以变量的地址能够用来仅有的标识变量
值传递:把一个变量里存储的数据传递给另一个变量,即在别的一个没锁的抽屉里放一个之前如出一辙的苹果
地址传递:把一个变量的地址传递给另一个变量,即在别的一个没锁的抽屉里放个纸条,上面写着之前那个抽屉的编号
效果域:变量工作规模的空间约束,即超越多远就不能直接翻开抽屉,假如运用变量的代码不在该变量的效果域,需求运用”值传递”或”地址传递”的方法取得相应数据再运用
生命周期:变量工作规模的时刻约束,即超越多久抽屉就被扔掉了,变量的生命周期一旦完毕,它之前占有的内存就会被从头用作它用,这个变量也就不再存在了
主动变量:不需求指定变量的存储类型的变量,一般咱们不进行任何润饰的变量的便是主动变量,需求运用auto关键字,现在已很少运用
寄存器变量:期望将该变量存储在寄存器中而不是内存中,能够进步变量的读取速度,需求运用register关键字,因为编译器的智能化,根本没有用了
全局变量:效果域是整个程序的变量,声明在main之外,需求global 关键字来声明,生命周期和进程相同长
部分变量:效果域是函数体的变量,声明在函数体fcn(){}内,生命周期和函数相同长
块内变量 :效果域在块内的变量,声明在句子块{}内,生命周期和句子块相同长
静态变量 :生命周期和进程相同长的变量,约束了变量的效果域不会超出本文件,即全局变量被约束在本文件,部分和块内仍是原本的效果域规模,声明需求运用static关键字
外部变量:该变量已经在其他源文件中被界说过,被拿到此文件中运用,声明一个外部变量需求运用extern关键字
宏
宏是C言语中运用#define关键字界说的一个别号,在预处理阶段会进行宏替换,以字符串的方式原模原样的替换被界说的字符串
#define add (plus) //程序中一切的add组合都会被替换成(plus)
C言语内置宏
这些宏长用于调试代码,C言语的许多宏都运用__XXX__格局,Linux的API里许多宏都运用XXX_XXX格局,所以当运用自界说宏的时分,应该运用其他格局防止重名,宏仅仅进行字符组合的替换,在预处理阶段就做完了,假如除了bug很难找。
__LINE__ //该行代码的地点行号__FILE__ //源文件的文件名__DATE__ //源文件被翻译到代码时的日期。__TIME__ //源代码翻译到方针代码的时刻__STDC__ //假如完成是规范的,则宏__STDC__含有十进制常量1。假如它含有任何其它数,则完成对错规范的。