網站首頁 編程語言 正文
1. 變量的存儲類別
內存
- 物理內存:實際的存儲設備
- 虛擬內存:操作系統虛擬出來的內存
- 操作系統會在物理內存和虛擬內存之間做映射。
- 在32位系統下,每個進程的尋址范圍是4G, 0x00 00 00 00 ~ 0xff ff ff ff
- 在寫應用程序的時候,我們看到的都是虛擬地址
- 在32位操作系統中,虛擬內存被分為兩個部分,3G的用戶空間和1G的內核空間,其中用戶空間是當前進程私有的,內核空間是一個系統中所有進程公有的。
虛擬內存分區(運行程序時進行分區)?
- 堆:在動態申請內存的時候在堆里開辟內存
- 棧:主要存放局部變量
- 靜態全局區:(1)未初始化的靜態全局區:靜態變量(定義便來嗯的時候,前面加static修飾),或全局變量,沒有初始化的,存在此區。(2)初始化的靜態全局區:全局變量,靜態變量,賦值的存在此區。
- 代碼區:存放程序代碼
- 文字常量區:存放常量
2. 全局變量
普通的全局變量
概念:在函數外部定義的變量
#include<stdio.h> int a = 10; // 普通全局變量 int main(){ printf("a的數值是%d\n",a); return 0; }
作用范圍:程序的所有地方,只不過用之前需要聲明,例如 extern int a;
生命周期:一直到程序運行結束。
注意:定義普通全局變量時,如果不賦值,默認為0
靜態全局變量
概念:定義全局變量的時候,前面加一個static修飾
作用范圍:static限定了靜態全局變量的作用范圍,只能在它定義的.c文件中有效
聲明周期:直到程序結束
注意:不賦值默認為0
#include<stdio.h> static int a = 10; // 靜態全局變量,不能跨文件使用 int main(){ printf("a的數值是%d\n",a); return 0; }
3. 局部變量
普通局部變量
概念:在函數內部定義的,或者復合語句中定義的變量
作用范圍:在函數中定義的變量,在函數中有效。在復合語句中定義的,在復合語句中有效
生命周期:在函數調用之前,局部變量不占用空間,調用的時候才為局部變量開辟空間,函數結束了,局部變量就釋放了。復合語句中也是如此。
#include<stdio.h> void myfunc(){ int a = 10; // 局部變量 printf("a的數值是%d\n",a); return; } int main(){ myfunc(); // printf("a的數值是%d\n",a); 這條語句是錯誤的,main不可以調用myfunc中的變量a return 0; }
靜態局部變量
概念:定義局部變量的時候,前面加static修飾
作用范圍:在它定義的函數或復合語句中有效
生命周期:第一次調用函數的時候,開辟空間賦值,函數結束后,不釋放,以后再調用函數的時候,就不再為其開辟空間,也不賦初值,用的是以前哪個變量。
#include<stdio.h> void myfunc(){ static int a = 10; // 靜態局部變量 printf("a的數值是%d\n",a); return; } int main(){ myfunc(); return 0; }
4. const不可賦值變量
const 關鍵字用來聲明不可賦值的變量
#include<stdio.h> int main(){ const int num; num = 7; // 這條語句必報錯 printf("num是%d\n",num); return 0; }
報錯如下:
既然不可以賦值,那有什么用呢?可以在初始化的時候進行賦值!
#include<stdio.h> int main(){ const int num = 8; printf("num是%d\n",num); return 0; }
5. volatile多變的變量
volatile關鍵字用來聲明多變的變量,這種變量的內容隨時可能被改變,而且這種改變的原因不是我們的語句造成的
原文鏈接:https://blog.csdn.net/weixin_45231460/article/details/124632675
相關推薦
- 2022-05-31 postman批量執行接口測試的圖文步驟_其它綜合
- 2022-09-07 如何應用?SOLID?原則在?React?中整理代碼之開閉原則_React
- 2023-01-15 使用tf.keras.MaxPooling1D出現錯誤問題及解決_python
- 2022-10-30 Python利用Pandas進行數據分析的方法詳解_python
- 2022-10-29 go語言打包的網頁wasm示例詳解_Golang
- 2022-04-25 python處理SQLite數據庫的方法_python
- 2022-11-27 詳解C++中動態內存管理和泛型編程_C 語言
- 2022-11-03 anaconda?部署Jupyter?Notebook服務器過程詳解_python
- 最近更新
-
- 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同步修改后的遠程分支