單片機(jī)/C/C++八股:(三十一)static 關(guān)鍵字的作用
上一篇下一篇static 關(guān)鍵字的作用static[adj] 靜態(tài)的總結(jié)在最后面可直接看static變量稱為靜態(tài)存儲(chǔ)類型的變量所謂靜態(tài)就是變量在程序運(yùn)行期間一直存在。static變量的特點(diǎn)如下在內(nèi)存中以固定地址存放而不是以堆棧方式存放程序運(yùn)行多次之后依然存放在同一地址存在.bss未初始化或初始化為0或.data已初始化為非0值段不在棧上只要程序沒結(jié)束此變量就不會(huì)消失即使放在子函數(shù)中被反復(fù)調(diào)用每次調(diào)用的時(shí)候都會(huì)保留調(diào)用結(jié)束的值static修飾的全局變量/函數(shù)其他文件無法使用其他文件即使使用extern聲明也無法訪問該變量如果沒有初始化那么靜態(tài)變量的初始值默認(rèn)是 0 。舉例有如下程序#includestdio.hvoidfun(){inta10;a;printf(%d %p\n,a,a);}intmain(){inti0;while(i5){fun();i;}return0;}程序運(yùn)行之后的結(jié)果為運(yùn)行兩次/* 第一次運(yùn)行結(jié)果 */1100000063867ff90c1100000063867ff90c1100000063867ff90c1100000063867ff90c1100000063867ff90c/* 第二次運(yùn)行結(jié)果 */110000002554dff7dc110000002554dff7dc110000002554dff7dc110000002554dff7dc110000002554dff7dc// 兩次運(yùn)行分配的地址都是不確定的現(xiàn)在將變量 a 定義為靜態(tài)變量并且不初始化#includestdio.hvoidfun(){staticinta;a;printf(%d %p\n,a,a);}intmain(){inti0;while(i5){fun();i;}return0;}程序運(yùn)行之后的結(jié)果為運(yùn)行兩次/* 第一次運(yùn)行結(jié)果 */100007ff74fb4a000200007ff74fb4a000300007ff74fb4a000400007ff74fb4a000500007ff74fb4a000/* 第二次運(yùn)行結(jié)果 */100007ff74fb4a000200007ff74fb4a000300007ff74fb4a000400007ff74fb4a000500007ff74fb4a000// 兩次運(yùn)行分配的地址都是固定的并且初始值為 0 1后才打印【總結(jié)】static關(guān)鍵字有三種用法定義靜態(tài)局部變量使其生命周期延長(zhǎng)到程序結(jié)束值會(huì)隨著每次調(diào)用而改變存放地址未初始化或顯示初始化為0存在 .bss段初始化為非0值則存在 .data 段不在棧上。定義靜態(tài)全局變量限制作用域別的文件不可調(diào)用即使同一模塊的 .c 和 .h 文件之間用extern也不行如key.c/key.h存放地址未初始化或顯示初始化為0存在 .bss段初始化為非0值則存在 .data 段不在棧上。定義靜態(tài)函數(shù)限制函數(shù)作用域別的文件不可調(diào)用即使同一模塊的 .c 和 .h 文件之間用extern也不行如key.c/key.h和普通函數(shù)一樣存放在代碼段.text中。// 1. 靜態(tài)局部變量staticintcount0;// 2. 靜態(tài)全局變量staticintglobalVar;// 3. 靜態(tài)函數(shù)staticvoidlocalFunc(void){}【注意】在 C 中結(jié)構(gòu)體成員不可使用static定義C 中可以但結(jié)構(gòu)體本身可以用static定義解釋在C中成員只是結(jié)構(gòu)體布局的一部分無獨(dú)立存儲(chǔ)而static是存儲(chǔ)類說明符只適用于變量和函數(shù)不能用于成員。舉例// 不可以成員不能是 staticstructS{staticintx;// 編譯錯(cuò)誤};// 可以結(jié)構(gòu)體變量可以是 staticstaticstructSobj;在 C 中static 定義的變量必須使用 “編譯時(shí)常量表達(dá)式” 進(jìn)行初始化例如數(shù)字、字符、字符串字面量、NULL、sizeof表達(dá)式、取靜態(tài)/全局變量的地址等編譯時(shí)就能確定的值解釋因?yàn)殪o態(tài)變量和全局變量在程序啟動(dòng)時(shí)main執(zhí)行前就已經(jīng)分配好內(nèi)存并完成初始化此時(shí)整個(gè)運(yùn)行時(shí)環(huán)境堆棧、函數(shù)調(diào)度等尚未就緒無法執(zhí)行任何需要 CPU 運(yùn)行的代碼。錯(cuò)誤行為舉例// 嚴(yán)重錯(cuò)誤intmain(){staticint*pmalloc(sizeof(int));*p20;free(p);pNULL;return0;}// 正確intmain(){staticint*pNULL;// p存放在.bss段if(pNULL){pmalloc(sizeof(int));// 運(yùn)行時(shí)賦值完全合法}*p20;free(p);pNULL;return0;}不過一般不會(huì)用static來定義用于malloc的指針純屬突發(fā)奇想。

相關(guān)新聞

針對(duì)西安哪里賣商用洗地機(jī),分析工業(yè)場(chǎng)景選型與上門試機(jī)

針對(duì)西安哪里賣商用洗地機(jī),分析工業(yè)場(chǎng)景選型與上門試機(jī)

西安工業(yè)場(chǎng)景洗地機(jī)選型指南與本地化服務(wù)分析在西北地區(qū)的清潔設(shè)備采購市場(chǎng)中,許多物業(yè)經(jīng)理和工廠負(fù)責(zé)人都在關(guān)注西安哪里賣商用洗地機(jī),旨在尋找能夠適配高強(qiáng)度作業(yè)環(huán)境的清潔解決方案。需要明確的是,本文并非官方排名或商業(yè)推廣,…

2026/8/2 7:45:16 閱讀更多
Spring Boot日志管理實(shí)戰(zhàn):從Logback配置到性能優(yōu)化全解析

Spring Boot日志管理實(shí)戰(zhàn):從Logback配置到性能優(yōu)化全解析

1. 項(xiàng)目概述:為什么日志管理是Spring Boot項(xiàng)目的基石在任何一個(gè)后端項(xiàng)目的開發(fā)與運(yùn)維過程中,日志系統(tǒng)都扮演著“黑匣子”的角色。它不直接產(chǎn)生業(yè)務(wù)價(jià)值,卻是我們排查線上問題、分析系統(tǒng)行為、監(jiān)控應(yīng)用健康狀態(tài)最可靠的依據(jù)。尤其在微服務(wù)架構(gòu)…

2026/8/2 7:45:16 閱讀更多
數(shù)字經(jīng)濟(jì)專業(yè)畢業(yè)生的多元職業(yè)路徑

數(shù)字經(jīng)濟(jì)專業(yè)畢業(yè)生的多元職業(yè)路徑

數(shù)字經(jīng)濟(jì)時(shí)代,專業(yè)人才如何破局?隨著大數(shù)據(jù)、人工智能、云計(jì)算等技術(shù)的深度融合,數(shù)字經(jīng)濟(jì)已成為全球經(jīng)濟(jì)增長(zhǎng)的核心引擎。對(duì)于即將走出校園的數(shù)字經(jīng)濟(jì)專業(yè)畢業(yè)生而言,面對(duì)的是一個(gè)充滿機(jī)遇與挑戰(zhàn)的廣闊天地。他們既擁有扎實(shí)的經(jīng)濟(jì)…

2026/8/2 7:45:16 閱讀更多
主流SLAM算法實(shí)戰(zhàn)選型指南:從激光到視覺的工程化應(yīng)用

主流SLAM算法實(shí)戰(zhàn)選型指南:從激光到視覺的工程化應(yīng)用

1. 從“盲人摸象”到“心中有圖”:SLAM算法的核心價(jià)值 在機(jī)器人領(lǐng)域,讓一臺(tái)機(jī)器從“睜眼瞎”變成“認(rèn)路熟手”,最核心的技術(shù)之一就是SLAM。這個(gè)詞聽起來有點(diǎn)玄乎,但拆開看就很簡(jiǎn)單: Simultaneous Localization and Ma…

2026/8/2 8:55:19 閱讀更多
I/O總線信號(hào)分線盒 M12/M8集線器解析!

I/O總線信號(hào)分線盒 M12/M8集線器解析!

在工業(yè)自動(dòng)化現(xiàn)場(chǎng),傳感器與執(zhí)行器星羅棋布。若每根線纜都直連控制柜,千平車間將變成線纜的海洋——布線耗時(shí)、故障難查、維護(hù)成本高昂。I/O總線信號(hào)分線盒(M12/M8集線器)正是為解決此痛點(diǎn)而生:它將分散的IO信號(hào)就近匯集…

2026/8/2 8:55:19 閱讀更多
工業(yè)AI邊緣設(shè)備刷機(jī)實(shí)戰(zhàn):從Jetson Orin NX系統(tǒng)部署到優(yōu)化

工業(yè)AI邊緣設(shè)備刷機(jī)實(shí)戰(zhàn):從Jetson Orin NX系統(tǒng)部署到優(yōu)化

1. 項(xiàng)目概述:為工業(yè)AI邊緣設(shè)備注入靈魂最近在折騰一塊來自Jetson生態(tài)的工業(yè)級(jí)AI計(jì)算設(shè)備——reComputer AI Industrial R2000。這玩意兒本質(zhì)上是一個(gè)基于NVIDIA Jetson Orin NX模組的工業(yè)載板,性能強(qiáng)悍,專為苛刻的工業(yè)環(huán)境設(shè)計(jì)。但拿到手的時(shí)…

2026/8/2 8:55:19 閱讀更多
邏輯函數(shù)化簡(jiǎn):從公式法到卡諾圖的數(shù)字電路設(shè)計(jì)核心技能

邏輯函數(shù)化簡(jiǎn):從公式法到卡諾圖的數(shù)字電路設(shè)計(jì)核心技能

1. 項(xiàng)目概述:從“會(huì)算”到“會(huì)變”的思維躍遷剛接觸數(shù)字電路的朋友,可能都有過這樣的經(jīng)歷:面對(duì)一個(gè)邏輯函數(shù)表達(dá)式,感覺每個(gè)字母和符號(hào)都認(rèn)識(shí),但組合在一起就像一團(tuán)亂麻,不知道從何下手。課本上告訴你&…

2026/8/2 8:55:19 閱讀更多
C語言volatile與extern關(guān)鍵字:底層原理、應(yīng)用場(chǎng)景與實(shí)戰(zhàn)避坑指南

C語言volatile與extern關(guān)鍵字:底層原理、應(yīng)用場(chǎng)景與實(shí)戰(zhàn)避坑指南

1. 項(xiàng)目概述:為什么這兩個(gè)關(guān)鍵字值得深挖? 搞C語言開發(fā),尤其是嵌入式、驅(qū)動(dòng)、操作系統(tǒng)內(nèi)核或者高性能服務(wù)端編程,你肯定不止一次在代碼里見過 volatile 和 extern 這兩個(gè)關(guān)鍵字。它們不像 int 、 if 、 for 那樣天天用&…

2026/8/2 8:55:19 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書,視頻號(hào)上,賺錢從來沒有這么容易過! 支持本地語音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說說 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過,那些年發(fā)過的QQ空間說說,那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書,視頻號(hào)上,賺錢從來沒有這么容易過! 支持本地語音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說說 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過,那些年發(fā)過的QQ空間說說,那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/2 2:52:49 閱讀更多