一个变量,不仅有数据类型,还有存储类型。
数据类型包括整形、长整形、单精度浮点型、双精度浮点型、各种字符型、指针型、结构型和自定义类型等。
存储类型:分为静态存储和动态存储两大类。
动态存储:包括自动变量(auto)和寄存器变量(register);
静态存储:包括静态变量(static)和外部变量(extern)。
1st 静态变量
定义格式:
static 数据类型 变量名列表;
1、分配内存的时间:在变量定义时就进行存储单元的分配。
(静态变量在编译时,完成对定义时的被赋初始值这一操作。也就是说,二次调用函数式时,不会再次定义也不会再次赋予该变量初始值。)
2、释放内存时间:从分配开始,一直保持到整个程序结束后才释放存储单元。
(函数调用结束时若程序尚未终止,也不释放。)
3、作用域:只在该函数内。
如果将静态变量定义成全局变量,那么作用是一定是该文件。其他文件绝对不能使用该变量。
4、如果定义时没有赋初值,则给一个默认值零。
(int 是0;char 是'\0';float是0.0)
使用建议:
占用的内存不能及时释放,所以尽量少用。
2nd 外部变量(亦称全局变量)
格式定义:
数据类型 变量名列表;
声明格式:
extern 数据类型 变量名列表;
特点:
1、能被其他文件调用;
2、在函数外定义,在文件开头定义就不需要在使用前声明,如果在函数与函数之间定义,则需要在main()中声明。
3、其他文件使用时,也要在文件头声明。
3rd内部函数&外部函数
内部函数
定义:只能被本文件调用的函数;
定义格式:static 类型标识符 函数名(形参表)
例如, static int kakaka(int a)
用处:在多人合作编写程序时,不同文件之间可以避免形成意料意外的干扰。例如,两个文件中使用了相同名称的不同函数也没有问题。
外部函数
定义:能被其他文件调用的函数
定义格式:
extern 类型标识符 函数名(形参表)
或者
类型标识符 函数名(形参表)
声明格式:
extern 类型标识符 函数名(形参表);
可见,一般没有前缀的函数都是外部函数。
外部函数在其他源文件中只有声明(声明不一定要在文件头,在函数内部也可以)就可以使用。