文章目录
前言
本手册是在学习过C语言的情况下,复习C语言使用的。如果帮助到大家,实属荣幸,如果有不足之处大家也可以在评论中提出来,互相学习互相增长,谢谢大家。
1.变量
一种存储单元,在C程序在执行过程中临时存储数据,在未初始化的情况下会被赋予一个随机值。常见的声明变量如:
int a;
char b = 'x';
float c = 2.5;
一般我们将声明在主函数之外的变量称为全局变量,声明在主函数之内的变量称为局部变量。
2.常量
多指存在于代码中的内容固定的一种类型的数值,多以文本的形式出现,而不是读、写或计算出来的数。简单来说,即一开始确定好的,并不会改变的一种值。某些常量如果对其修改可能会报错或引起严重的后果。常见的常量声明如:
//声明一个字符串常量
char* p = "hello man";
后续还会介绍一种常量,是通过宏定义声明的。
3.声明
“定义变量是件很容易的事,但想时时刻刻控制他很难。” 没错,如何控制好变量是一件很重要的事,声明就起到了很重要的作用。
3.1-类型指定符
我们普通的变量的声明,比如“int a;……”等等,告诉了计算机变量的类型,“int、float、void、char……”等数据类型的名字,称为类型指定符,他们的作用就是声明变量或常量的类型。
3.2-类型限定符
见名知意,对一种类型的变量做出某些限制的声明。对于C语言基础知识,这里我们只介绍一种类型限定符const。
3.2.1-const
使用const声明的变量,之后不能被改变,做参数也是。
语法规则:const int a;
对于指针类型
当使用const声明指针变量时,其位置不同,可修改的内容也是不同的。 比如:
int* const a; 中的a是不可变的,即指向不可变。*a可变,即指向的内容可变。
const int *b; 、 int const *b; 中的b是可以改变的,即指向可变。*b不可变,即指向的变量不可变。
3.3-存储类型
针对变量及小范围函数的作用域、存储期、链接这三种性质进行声明。下面只介绍auto、static、extern三种存储类型。
3.3.1-三性质
存储期: 见名知意,即变量从获得内存到释放内存的期间,也称生存周期。存储期有静态存储期、自动存储期。自动存储期指,在某一限定范围内(比如某个函数内)声明的变量在该范围生效时获得内存单元,在该范围失效时释放内存单元。静态存储期指,在程序运行期间占有同一个存储单元。
作用域: 见名知意,即能够通过名字引用变量的范围。作用域有文件作用域、块作用域。文件作用域表示该变量从声明处至文件末尾都是可用的,块作用域表示,该变量从声明处至块末尾都是可用的。(这里的块就是一个限定的区域,比如一个函数内)
链接: 确定了程序的不同部分可以通过变量名字共享此变量的范围。链接有内部链接、外部链接、无连接。内部链接指,该变量只能本文件内使用。外部链接指,该变量可以被程序中的几个或全部文件共享。无连接指,只属于某一块,根本不能被共享。
3.3.2-auto
默认的未填写存储类型的变量的存储类型为auto型。当作用于局部变量,其三性质为自动存储期、块作用域、无连接。当作用于全局变量,其三性质为静态存储期、文件作用域、外部链接。
int x;
void fun1()
{
int z;
}
3.3.3-static
静态存储类型,当使用static作用于局部变量时,其三性质为静态存储期、块作用域、无连接。当作用于全局变量时,其三性质为静态存储期、文件作用域、内部链接。
static int x;
void fun1()
{
static int z;
}
3.3.4-extern
extern的作用是使多个源文件可以共享被修饰的变量。当使用extern作用于局部变量时,其三性质只能确定为静态存储期、块作用域。当作用于全局变量时,其三性质只能确定为静态存储期、文件作用域。
对于其修饰后的变量的链接性质,如果在较靠前的位置(任何函数定义的外部)声明,其具有内部链接,否则具有外部链接。
extern int x;
void fun1()
{
extern int z;
}
3.3.5-函数的存储类型
与变量不同,对于函数的存储类型的效果,我们只考虑三性质中的链接。
对于不写存储类型声明(默认)和extern其含有外部链接,而使用static声明的含有内部链接。
这么一来,使用static修饰函数就有一定的好处:一是更容易维护,即修改该函数,不会对其他文件有影响;二是减少了“名字空间污染”,即不会与其他文件中的同名函数或变量起冲突。(面试小考点哦!)