網站首頁 編程語言 正文
1.static 可以修飾局部變量
首先讓我看看這段代碼
#include<stdio.h> void test() { int a = 1; a = a + 1; printf("%d", a); } int main() { int i = 0; while (i < 10) { test(); i++; } return 0; }
你認為輸出的結果是什么呢?
那為什么結果是2222222222呢
因為局部變量 a 進入這個范圍創建? 出了這個范圍銷毀? ?所以結果都是2
當我們加上static 的結果又會是什么
那為什么加上 static 結果就不一樣了
我們研究一下static的使用原理
我們的內存分為三大類
我們的局部變量放在棧區??
而static把a放在了靜態區? ?而在靜態區的變量 出了他的范圍是不銷毀的
我們對比一下 可能更加直觀
?所以 static 修飾局部變量的時候,其實改變的是局部變量得存儲位置
靜態得局部變量是放在靜態區,放在靜態區的變量出了作用域是不會銷毀的,相當于生命周期延長了。
?補充? ?變量的作用域是不變的,只是生命周期延長了
2. static 可以修飾全局變量
我們再創建一個源文件?
? ?全局變量的作用域是整個工程
如果我們想引用另一個源文件的函數? ?? 這里我們不得不說 extern 這個關鍵字
如圖
? static 可以修飾全局變量? 如果我們再全局變量前 加上static會是什么結果呢
此時就會報錯??
一個全局變量具有外部鏈接屬性的 (就是可以被其他源文件引用)但是被static 修飾后外部鏈接屬性就變成了內部鏈接屬性 只能在自己所在的源文件內部使用不能在其他文件內部使用
所以再次調試的時候就會報錯
那 static 修飾的全局變量的本質是? 外部鏈接屬性發生改變? ?而不是他的作用域變小
static 修飾全局變量的意義是? 如果你定義了一個全局變量? 別人用 extern 就可以隨便使用??
如果你不想讓別人看? 就可以用static .?
3.static 可以修飾函數
我們用另一個源文件創建一個函數? 如圖
用 關鍵字extern 聲明后? 調試結果
這里我們在函數前加上static 又會是什么結果呢?
? 其實一個函數本身具有外部鏈接屬性? 被static修飾后 外部鏈接屬性變成了內部鏈接屬性? 只能在源2.c 內部使用 其他源文件無法使用? ? 使用上感覺作用域變小
我們可以發現 static 修飾全局變量和修飾函數用法一樣? ?
總結
當我們使用一個局部變量? 出了他的范圍 不希望他被銷毀下次進來之后還在 那我們就可以拿static 修飾?
當我們希望一個全部變量 在他自己源文件使用 任意其他地方不想讓別人看到 也可以用static修飾
當我們寫的函數只是自己用一下 不希望別人引用 則也可以用static修
原文鏈接:https://blog.csdn.net/weixin_64145417/article/details/122032153
相關推薦
- 2022-03-20 C++靜態成員函數和this指針詳解_C 語言
- 2023-10-26 在el-table中根據判斷不同值顯示對應文本
- 2022-11-02 React中編寫CSS實例詳解_React
- 2022-09-22 為什么float4個字節比long8個字節所表示的數值范圍廣
- 2022-08-21 python深度學習tensorflow實例數據下載與讀取_python
- 2021-12-09 C語言實現將double/float?轉為字符串(帶自定義精度)_C 語言
- 2022-05-20 子查詢關鍵字-ALL、ANY、SOME、IN、EXISTS
- 2022-10-05 Python中matplotlib庫安裝失敗的經驗總結(附pycharm配置anaconda)_py
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支