关键字: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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值