通俗易懂,Static在c语言中的作用与使用场景

static关键字在C语言中用于修饰变量和函数,它可以改变局部变量的生命周期,使它们在程序运行期间始终存在。对于全局变量,static使其变为内部链接,限制其在当前文件内可见。同样,static修饰函数也会限制其作用范围,仅能在定义它的文件中使用。这提供了一种保护机制,用于控制变量和函数的可见性和生命周期。
摘要由CSDN通过智能技术生成

在c语言中:

static是用来修饰变量和函数的:

1.修饰局部变量-称为静态局部变量

2.修饰全局变量-称为全局变量

3.修饰函数-称为静态函数

普通的局部变量:自动创建,自动销毁,生命周期为局部内

1.修饰局部变量-称为静态局部变量

这是没有static修饰的局部变量,可以看出执行while的时候每一次的循环都需要重新调用一次test(),但是test里面的变量是局部变量,出了作用域以后自动销毁,并不记录上一次变量的值

当static修饰局部变量的时候改变了这个局部变量的生命周期

以上是变量在计算机中位置

Static修饰局部变量,是改变了变量的存储类型,本来局部变量是放在栈区的,被static修饰后存放在内存的静态区了,因为存储类型改变的缘故,从而导致了生命周期变长

但是,不影响作用域

2.修饰全局变量-称为全局变量

修饰全局变量一般在多个文件中使用,这里先声明如果想在a文件中使用b文件中的全局变量必须要在a文件中用extern来修饰全局变量,如下图:

全局变量本身是具有外部链接属性的,就算不加extern也一样,只不过不能在别的文件中使用

当我们加入static后:

发现就算有extern也不能调用另一个文件中被static修饰的全局变量了

原因:

1.static修饰全局变量后,将外部链接属性变成了内部链接属性。

2.此时的全局变量只能在自己的.c文件中使用,其他文件无法链接使用

给我们的感觉:static就像是能影响变量的作用域

3.修饰函数-称为静态函数

修饰函数其实本质上和修饰全局变量比较类似,大多都是在多文件的情况下使用

函数也是具有外部链接属性

  1. static修饰函数后,将外部链接属性变为了内部链接属性

  1. 使得这个函数只能在自己的.c文件中使用,其他的.c文件无法链接使用

总结:static就像是一种保护机制,在全局变量和函数中能够缩小变量的作用域,在局部变量中延长了他的生命周期,当我们想创建一个变量或者函数又不想这个变量被其他文件使用,或者不想他被改变的时候可以用static对变量或者函数进行修饰。

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: 指针是C语言的一个重要概念。它可以用来指向变量、函数或其他内存地址。比如,假设您有一个变量int a,其值为5,那么您可以声明一个指针变量int *b,它将指向变量a的内存地址,这样就可以通过指针b来访问变量a的值。 ### 回答2: C语言的指针是一种特殊的变量类型,它具有存储内存地址的能力。我们可以把指针看作是一个存放了另一个变量的地址的容器。 举个例子来说明:假设我们有两个C语言变量,一个是整数类型的a,另一个是指针类型的b。我们可以通过以下步骤来使用指针。 首先,我们定义一个整数变量a,并给它赋一个值,比如说10。然后,我们定义一个指针变量b,并将其指向a的地址。这可以通过使用取地址运算符&来实现,即`b = &a;`。现在,指针变量b存储了变量a的地址。 接着,我们可以使用解引用运算符*来访问指针变量所指向的地址上的值。我们可以通过在指针变量前面加上解引用运算符,来获得变量a的值,即`*b`。这将返回a的值,也就是10。 我们还可以通过指针来修改变量a 的值。我们只需使用解引用运算符来访问变量a,并将新的值赋给它,比如说`*b = 20;`。现在,变量a的值将变为20。 总体来说,指针可以帮助我们在程序访问和操作内存的数据,它提供了直接访问内存地址的能力,从而增加了程序的灵活性和效率。然而,指针的使用也需要谨慎,因为错误的指针操作可能会导致程序崩溃或运行出错。因此,在使用指针时要确保指针变量指向有效的内存地址,并避免悬空指针或野指针的出现。 ### 回答3: 在C语言,指针是一种变量类型,用来存储内存地址。通过指针,我们可以直接访问和修改内存存储的值。可以将指针比喻为一根手指,它指向某个特定的内存位置。 我们可以通过使用指针来提高程序的效率和灵活性。例如,我们可以使用指针来传递大量数据,而不需要复制整个数据。此外,指针也常用于动态内存分配,例如在运行时分配数组或其他数据结构。指针还可以在函数返回多个值,而不仅仅是一个返回值。 让我们来看一个简单的例子来说明指针的使用。假设我们有两个整数变量a和b,我们想要交换它们的值。使用指针,我们可以这样做: ``` void swap(int *x, int *y) { int temp = *x; *x = *y; *y = temp; } int main() { int a = 10; int b = 20; printf("交换前:a = %d, b = %d\n", a, b); swap(&a, &b); printf("交换后:a = %d, b = %d\n", a, b); return 0; } ``` 在这个例子,我们给函数`swap`传递了`a`和`b`的地址(即指针),而不是它们的实际值。在函数内部,我们使用`*x`和`*y`来访问这些地址处存储的值,从而实现了交换操作。 通过这个例子,我们可以看到指针的使用方式。需要注意的是,在操作指针时,需要小心避免空指针和野指针的问题,以及内存泄漏等潜在的问题。因此,在使用指针时需要谨慎,并确保正确管理内存。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值