C语言中与“静态”相关的词包括静态全局变量静态局部变量和静态函数关键词是static。C语言中的变量从作用域分可以分为全局变量和局部变量从存储方式分可以分为静态存储方式和动态存储方式。1. 静态全局变量下面代码中的a属于全局变量其特点是变量申请后存储在静态存储区不会像函数内的局部变量随着函数调用的结束而消失全局变量会一直存储在静态区直至所有程序执行完毕才会销毁。此时如果有另外一个 .c 文件引用了该文件则应用该文件的.c文件也可以访问这个全局变量。#include stdio.h int a0; void func() { printf(a%d\n,a); }静态全局变量是指在全局变量之前添加 static 关键字其特点和全局变量类似除了下面一点静态全局变量只能由本文件的函数进行访问而无法被包含本文件的其他文件访问。也就是 static int a; 如果声明在全局只是代表这个变量只能由本文件访问而不能被其他文件访问。要注意全局变量和静态全局变量都是在main()函数执行之前进行初始化的利用这个特点可以在main函数执行之前执行一些代码完成初始化工作。2. 静态局部变量静态局部变量是指在局部区域函数内部而并非全局区域定义的变量但由于存储在静态区所以并不会其值并不会随着函数调用的结束而消失其特点是只能被初始化一次。比如下面的程序。我们在count函数内部声明了一个局部变量a当声明的时候不赋值时**静态变量的默认值是0**之后多次调用count函数a会一直存在并且不会再调用static a语句从而使得整个函数能够记录自己被调用了几次。需要说明的是对于普通的非静态变量在vc中只声明不赋值其值默认为0但是在gcc中会给变量一个随机值所以在声明变量的时候赋值是一个好习惯。#include stdio.h int count() { static a; a; return a; } int main() { ... count(); ... count(); return 0; }3. 类内静态成员变量类内静态成员变量属于这个类而不属于某个对象。所以静态成员变量可以直接通过函数名::变量名进行访问。类内的静态成员变量在类内只是进行申明工作需要在类外重新赋值和定义。如果在类内直接定义静态变量的值会编译报错。一种错误的示范如下// A.h class A { public: static int a 100; }; // main.cpp int main() { std::coutaA::astd::endl; }4. 类继承时的静态成员变量#include boost/filesystem.hpp #include string #include fstream #include iostream class Parent { public: Parent() default; ~Parent() default; int counter() { static int a(0); return a; } static int b; }; int Parent::b 0; class Sun: public Parent { public: Sun() default; ~Sun() default; }; class Daughter: public Parent { public: Daughter() default; ~Daughter() default; }; int main() { Parent parent; Sun sun; Daughter daughter; std::cout Test of static variable in member function std::endl; std::cout parent.counter() std::endl; std::cout sun.counter() std::endl; std::cout daughter.counter() std::endl; std::cout Test of static member variable std::endl; std::cout parent.b std::endl; std::cout sun.b std::endl; std::cout daughter.b std::endl; return 0; }输出Test of static variable in member function 0 1 2 Test of static member variable 0 1 2参考文献C/C中静态变量_c静态全局变量-CSDN博客
相关新闻
Speechless:如何用这款免费Chrome插件永久保存你的微博记忆?
Speechless:如何用这款免费Chrome插件永久保存你的微博记忆? 【免费下载链接】Speechless 把新浪微博的内容,导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless
你是否曾担心自己…
3分钟解锁Windows 11 LTSC完整应用生态:一键安装微软商店的智能解决方案 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore
你是否曾为Window…
最新新闻
终极指南:如何快速下载国家中小学智慧教育平台的电子课本?
终极指南:如何快速下载国家中小学智慧教育平台的电子课本? 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内…
1. 项目概述:为什么“codex: command not found”成了2026年开发者桌面的高频报错? “codex: command not found”——这行红色错误提示,最近半年在终端里出现的频率,已经快赶上 git status 的刷新次数了。它不是某个冷门工具的…