自学内容网 自学内容网

关键字:static

1.铺垫

1.1全局变量可以跨文件访问吗?答:可以;

1.2函数可以跨文件访问吗?答:可以

1.3在具体的应用场景中,程序员不想让全局变量或者函数跨文件访问,只在本文件内部被访问?答:可以——引出static关键字

2.static

2.1static修饰全局变量,该变量只能在本文件内被访问,不能被外部其他文件直接访问;但是可以被间接访问——通过访问非static修饰的函数,访问static修饰的全局变量

2.2static修饰函数,该函数只能在本文件内被访问,不能被外部其他文件直接访问;但是可以被间接访问——通过访问非static修饰的函数,访问static修饰的函数

解释:static修饰全局变量或函数,限制了作用域,本来是个文件都可以访问,修饰之后,只能在本文件中被访问

2.3static修饰局部变量,更改局部变量的生命周期,作用域不变,临时变量->全局生命周期

但是可以通过全局变量指针,来获取局部变量的地址,从而访问变量

扩展:进程地址空间的知识

static修饰局部变量,将局部变量从栈区定义,变成了已初始化全局数据区定义,延长了生命周期;

举例:

#include<stdio.h>
void fun() {
    static int a = 0;
}
int main(){

    func();
    printf("a=%d\n", a);
    return 0;
}

//此程序会报错:未定义标识符a;a的作用域依旧是func()代码块;但生命周期为全局生命周期

//func()函数跑完之后,空间会被回收,可是a依旧被保存在内存中;

int *p=NULL;

void fun() {
    static int a = 0;

    p=&a;
}
int main(){

    printf("a=%d\n", *p);        //可以如此将a拿出来
    return 0;
}


原文地址:https://blog.csdn.net/qincjun/article/details/139904775

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!