【C语言】 “函数指针”和“指针函数” 用法和详解(太细了!!!)菜鸟级教程


前言

在C语言中,“static” 关键字用于声明静态变量和静态函数,具体取决于其在不同上下文中的使用。下面是对C语言中"static" 的主要用法的解释:


一、静态变量,不使用static

函数中定义的变量,在函数调用结束时销毁

#include <stdio.h>
void test()  
{
    int x = 0;
    ++x;
    printf("\t %d", x);
}
int main()
{
    for(int i = 0; i < 5; i++)
    {
        test();
    }
}
输出结果: 1  1  1  1  1

二、使用static关键字“静态变量”

静态变量(Static Variables):在C语言中,“static” 用于声明静态变量。静态变量与自动变量(函数内部声明的普通变量)不同,它们的生命周期在程序运行期间都是存在的,而不是在函数调用结束时销毁。这使得静态变量在多次函数调用之间保留其值。

#include <stdio.h>
void test()  
{
    static int x = 0;  // 限制局部变量,使其生命周期更长,直到进程退出
    ++x;
    printf("\t %d", x);
}
int main()
{
    for(int i = 0; i < 5; i++)
    {
        test();
    }
}
输出结果: 1   2   3   4   5

三、静态全局函数与函数的区别

静态函数(Static Functions):在C语言中,函数默认情况下是全局可见的。但如果你在函数声明前使用 “static”,它将限制该函数的作用域,使其仅在定义它的源文件中可见,无法被其他源文件中的函数调用。这有助于避免函数名冲突。

1.建立一个头文件xxx.h

#ifndef HUTUTU_H    //如果没有HUTUTU_H
#define HUTUTU_H    //则定义HUTUTU_H; /*后面这个可以根据自己情况命名*/
#include <stdio.h>  //头文件
//extern int static_sum;       //不能声明,因为在文件中被static定义位,静态变量
//extern void global_test();   //不能声明,因为在文件中被static定义位,静态函数
extern global_sum;             //全局变量声明
extern void global();          //函数声明
extern void static_test();     //函数声明
#endif                         //结束标志

2.建立一个文件xxx.c

#include "hututu.h"

static int static_sum = 1024; // static限制全局变量,只在该文件进行调用不能通过 extern 连接调用
int global_sum = 256;        

static void global_test() // static限制全局函数,只在该文件进行调用不能通过 extern 连接调用
{
    printf("静态函数被调用\n");
}

void global()
{
    printf("其他文件函数被调用\n");
}

3.建立第二个文件xxx.c,作为主函数调用

#include "hututu.h"
int main()
{
    //global_test();  //执行global_test()编译会报错,因为global_test()是另外一个文件的静态函数,不能被其他文件调用
    global_test();    //调用另外一个文件的函数  
}
输出结果: 其他文件函数被调用

四、静态全局函数与函数的区别

静态全局变量(Static Global Variables):全局变量通常可以在不同的源文件中访问。但如果你在全局变量前使用 “static”,它将限制该全局变量的作用域,使其仅在定义它的源文件中可见,无法被其他源文件中的函数访问。

#include "hututu.h"
int main()
{
    //global_test();  //执行global_test()编译会报错,因为global_test()是另外一个文件的静态函数,不能被其他文件调用
    global_test();    //调用另外一个文件的函数
    //printf("static:%d\n",static_sum);   //执行报错,调用另外文件的全局变量,用关键字声明,变为给文件的静态全局变量不能被其他文件调用  
    printf("global:%d\n",global_sum);     //调用另外文件的全局变量  
}
输出结果:global: 256

总结

“static” 在C语言中用于控制变量和函数的作用域和生命周期,以便更好地管理程序的状态和模块化。


粉丝福利、需求解答

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恒创科技工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值