網站首頁 編程語言 正文
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-04-10 MalformedByteSequenceException: 1字節的 UTF-8 序列的字節 1
- 2022-12-14 C++?Boost?weak_ptr智能指針超詳細講解_C 語言
- 2022-10-11 React - 當輸入框獲取焦點時自動選中輸入框中的內容
- 2022-05-11 為什么一級封鎖協議不能保證不讀取到臟數據
- 2022-12-06 詳解Python的整數是如何實現的_python
- 2022-04-05 C#反射調用拓展類方法實例代碼_C#教程
- 2022-08-18 Flutter中關于angle的踩坑記錄_Android
- 2022-12-24 Typescript中interface與type的相同點與不同點的詳細說明_基礎知識
- 最近更新
-
- 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同步修改后的遠程分支