全局变量的默认初始值就是0,局部变量没有固定的初始值。
局部变量是函数或者代码块内部定义的变量(包括函数的形参)。
单纯定义一个结构体的时候,并不会分配存储空间。只有
结构体所占用的空间,一定是那一个最大成员的字节数的倍数。
结构体内存的排列方式是在分配的内存空间中按照成员顺序从低到高排列,类似于数组的排列方式。但是各个单独的变量是按照内存序列从高到低排列;每个单独的数据类型内部的字节排列也是从高到低排列。
定义结构体的时候可以不定义结构体名称,但是不能重用。
预处理指令:在翻译成0和1之前执行;位置是随便写的;是有作用域的(从编写指令的那一行起,一直到文件结尾)。
1.宏定义:只是纯粹的文本替换。
2.条件编译
3.文件包含
宏定义:如果要结束宏定义,用 #undef 宏名 结束;有参数的宏定义的时候,最好在每一个变量和每一层逻辑上,都加上括号,避免出错;带参数的宏定义,效率比函数高。
条件编译:必须以 #endif 结束;不执行的 if 语段不会被编译,而普通 if 语句不会执行的语段也会编译一下。
当多次 include“” 某个文件时,该文件会被多次复制到当前文件,会降低编译效率。
为了防止被多次包含进同一个文件,在头文件 .h 中,可以将函数名如下处理:
#inndef ABC (通常用头文件名来命名)
#define ABC 123456(这个定义对象可以没有,即定义一个空宏)
在此声明函数名
#endif
各自的头文件里面定义的宏名,必须是不同的;通常以文件名作为宏名。
#define 和 typedef 差别,#define是宏定义,只是替换代码。当遇到多个指针时,#define 只对第一个指针有效,导致后面的变量不再是指针。比如:
#define String2 char *
typedef char * String;
String s1 , s2; //s1、s2 都是指针
String2 s3 , s4 ; // 相当于是 char *s3 , s4,即是 char *s3 ,char s4,导致第二个变量不再是指针
外部函数(extern):定义的函数鞥被本文件和其他文件访问,默认情况下所有的函数都是外部函数。不允许有同名的外部函数。完整的定义和声明一个外部函数。“extern” 可以省略。
内部函数(static):定义的函数只能被本文件访问,其他文件不能访问。允许不同文件中有同名的内部函数。定义和声明一个内部函数。
完整的外部函数格式:extern 返回类型 函数名(形参)
完整的内部函数格式:static 返回类型 函数名(形参)
全局变量分两种:
外部变量:定义的变量能被本文件和其他文件访问。
1.默认情况下,所有的全局变量都是外部变量。
2.同文件和不同文件中的同名外部变量,都代表着同一个变量。
3.在函数前面,声明一个外部变量。当外部变量定义在文件后面时,在前面声明。
内部变量(static):定义的变量只能被本文件访问,不能本其他文件访问。
1.不同文件中的同名内部变量,互不影响。
static定义一个内部变量,extern声明一个外部变量。
static修饰局部变量:
1.延长局部变量的生命周期:程序结束的时候,局部变量才会被销毁。
2。并没有改变局部变量的作用域。
对性能优化有一定帮助。
static修饰局部变量的使用场合:
如果某个函数的调用频率特别高;这个函数内部的变量值是固定不变的。
递归的两个条件:
1.函数自己调用自己
2.必须有一个明确的返回值
|
|