文章目录
前言
提示:
局部变量:定义在函数内部的变量,作用域位函数体内部,生命周期为执行函数期间。
注意:函数形参也是局部变量。
全局变量:定义在函数外部的变量称为全局变量,作用域为整个项目所有.c文件都可以用,生命周期为从变量定义到程序执行结束。
注意:局部变量可以跟全局变量同名,具体是哪个变量在起作用采用就近原则。
提示:以下是本篇文章正文内容,下面案例可供参考
一、static
1.修饰局部变量
static 修饰局部变量:延长局部变量的生命周期。
void fun()
{
static int a ;
}
作用域:函数内部,
生命周期:整个代码运行期间。
2.修饰全局变量
static 修饰全局变量:限定全局变量为本文件内使用。
static int a ;
void fun()
{
}
生命周期:
作用域:从定义的.c文件下使用,限定本文件使用。
生命周期:整个代码运行期间。
3.修饰函数
static 修饰函数:限定定义的该函数在本文件使用。
static void fun()
{
}
作用:在整个项目为了避免函数名重复。
二、const
1.const修饰常量(c语言中是伪常量)
常量a:
int main(void)
{
const int a = 10;
a = 20;//不可直接对变量进行修改
int *p = &a;
*p = 20;//这样在c语言中会警告但是可以编译运行
return 0;
}
2.const修饰指针变量
const 修饰指针变量代表指针的指向不能改变:
int main(void)
{
const int a = 10;
const int b = 20;
int *const p = &a;
//p =&b;//指针指向不能改变
return 0;
}
3.const修饰指针变量指向的内容
const 修饰指针变量代表指针的指向的内容不能改变:
int main(void)
{
const int a = 10;
const int * p = &a;
//*p = 20;//指针指向的内容不能改变
return 0;
}
4.const修饰指针变量指向的内容及指针变量
const 修饰指针变量代表指针的指向的内容不能改变:
int main(void)
{
const int a = 10;
const int b = 20;
const int *const p = &a;
//p = &b;指针的指向不能改变
//*p = 30;指针的指向的内容不能改变
return 0;
}
5.const修饰指针变量的区分
从左向向右看,const修饰的是*的则代表指针指向的内容不能改变,const修饰的是指针变量则代表指针的指向不能改变。
三、extern
1.extern在一个文件内修饰外部变量
解释:一个变量的如果不在文件的最开始进行定义,那么其作用域时从定义开始到结束,如果要在定义之前使用数据那么在使用之前进行数据声明。
本文件一般用于函数声明,变量只能定义一次但可以被多次声明。
列:
extern int add(int a,int b);
int main(void)
{
int a=10,b=20;
add(a,b)
return 0;
}
int add(int a,int b)
{
return a+b;
}
2.extern在多个文件内修饰外部变量
解释:在一个项目中,如果要使用在另一个.c文件中变量或者函数,需要在头文件中进行声明,然后再.c文件中包头文件。
列:
extern int add(int a,int b);
int main(void)
{
int a=10,b=20;
add(a,b)
return 0;
}
int add(int a,int b)
{
return a+b;
}
四、volite
作用:因为cpu在读取数据的时候是硬盘到内存再到寄存器,cpu从寄存器上读取数据,有时编译器会进行优化cpu直接从寄存器上读取,而不从内存进行读取,加这个关键字就是cpu读的数据必须是从内存上读取的而不是从寄存器上读取数据。
五、auto
在定义变量的时候编程人员不知道是什么数据类型,这个时候就可以在数据前面写一个auto,让编译器去自己推这个数据是什么类型。
六、typedef
typedef 关键字:用于声明表变量类型,可以使代码变得更简洁
注意:
(1)只能用于声明各种类型名,不能用于定义类型。
(2)只能声明已经存在的数据类型,本质上是给以存在的类型起一个别名。
(3)在不同的源文件中使用typedef的话要在.h文件中进行声明,在源文件中使用把头文件包一下就行。
(4)方便代码的通用和移植,在不同的操作系统上int代表的存储大小不一样。
(5)typedef与#define的区别
例子:#define COUNT int;
typedef int COUNT ;
define是在预编译阶段进行的字符串替换
而typedef是在编译的时候处理,当于给已存在的数据类型起了一个别名。