static 静态的
一、static 修饰局部变量——称为静态局部变量
static改变了局部变量的生命周期(本质上是改变了变量的存储类型),当被static修饰时,局部变量由栈区存放到了静态区。
void test()
{
int num = 1;
printf("%d ", num++);
}
void test1()
{
// static修饰局部变量——称为静态局部变量
static int num = 1;
printf("%d ", num++);
}
int main()
{
for (int i = 0; i < 10; i++)
{
test();
}
// 打印:1 1 1 1 1 1 1 1 1 1
printf("\n");
for (int i = 0; i < 10; i++)
{
test1();
}
// 打印:1 2 3 4 5 6 7 8 9 10
return 0;
}
二、static 修饰全局变量——-称为静态全局变量
static修饰的全局变量,使得这个全局变量只能在自己所在的源文件(.C)内部可以使用,其他源文件不能使用
本质:全局变量在其他源文件内部可以被使用,是因为全局变量是具有外部链接属性,但是被static修饰后,就变成了内部链接属性
实例:
此时在工程文件中创建了两个(.c)文件并且在(test2.c)中创建了一个全局变量,再回到(test.c)中并声明外部符号,此时(test.c)中是没有变量(num)的,运行文件可以发现还是打印了(test2.c)中的(num)
现在回到(test2.c)中在(num)前加上 static 关键字后,再回到(test.c)中运行,就会运行出错——无法解析外部命令
三、Static 修饰函数——称为静态函数
static修饰函数后,使得函数只能在自己所在的源文件内部使用,不能在其他源文件内部使用
本质上,static是将函数的外部链接属性变成了内部链接属性,和static修饰全局变量一样,因此这里就不过多介绍了
const 关键字
const修饰的变量具有常量属性,理论上不可以被修改
一、const修饰普通变量
int main()
{
int num = 10;
num = 20;// true
// const修饰的变量具有常量属性,不可以被修改
const int num = 10;
num = 20;// false
return 0;
}
二、const修饰指针变量
const 放置于 * 左边 const int* p
表示:p 指向的对象不能通过p来改变,但是p变量本身的值是可以
const 放置于 * 右边 int* const p
表示:p 指向的对象可以通过p来改变,但是p变量本身的值是不可以改变的
int main()
{
// const修饰指针变量有两种情况
// const 放置于 * 左边 const int* p
// const 放置于 * 右边 int* const p
int num1 = 10;
int num2 = 20;
// const 放在 * 的左边
//表示:p 指向的对象不能通过p来改变,但是p变量本身的值是可以改变的。
const int* p = &num1;
*p = 20;//err
*p = &num2;//yes
// const 放在 * 的右边
//表示:p 指向的对象可以通过p来改变,但是p变量本身的值是不可以改变的。
int* const p = &num1;
*p = 20;//yes
*p = &num2;//err
return 0;
}
标签:const,int,关键字,num,static,修饰,全局变量
From: https://blog.csdn.net/LVZHUO_2022/article/details/142732593