C語言由淺入深了解變量的應用
1. 變量的存儲類別
內存
- 物理內存:實際的存儲設備
- 虛擬內存:操作系統(tǒng)虛擬出來的內存
- 操作系統(tǒng)會在物理內存和虛擬內存之間做映射。
- 在32位系統(tǒng)下,每個進程的尋址范圍是4G, 0x00 00 00 00 ~ 0xff ff ff ff
- 在寫應用程序的時候,我們看到的都是虛擬地址
- 在32位操作系統(tǒng)中,虛擬內存被分為兩個部分,3G的用戶空間和1G的內核空間,其中用戶空間是當前進程私有的,內核空間是一個系統(tǒng)中所有進程公有的。
虛擬內存分區(qū)(運行程序時進行分區(qū))
- 堆:在動態(tài)申請內存的時候在堆里開辟內存
- 棧:主要存放局部變量
- 靜態(tài)全局區(qū):(1)未初始化的靜態(tài)全局區(qū):靜態(tài)變量(定義便來嗯的時候,前面加static修飾),或全局變量,沒有初始化的,存在此區(qū)。(2)初始化的靜態(tài)全局區(qū):全局變量,靜態(tài)變量,賦值的存在此區(qū)。
- 代碼區(qū):存放程序代碼
- 文字常量區(qū):存放常量
2. 全局變量
普通的全局變量
概念:在函數(shù)外部定義的變量
#include<stdio.h> int a = 10; // 普通全局變量 int main(){ printf("a的數(shù)值是%d\n",a); return 0; }
作用范圍:程序的所有地方,只不過用之前需要聲明,例如 extern int a;
生命周期:一直到程序運行結束。
注意:定義普通全局變量時,如果不賦值,默認為0
靜態(tài)全局變量
概念:定義全局變量的時候,前面加一個static修飾
作用范圍:static限定了靜態(tài)全局變量的作用范圍,只能在它定義的.c文件中有效
聲明周期:直到程序結束
注意:不賦值默認為0
#include<stdio.h> static int a = 10; // 靜態(tài)全局變量,不能跨文件使用 int main(){ printf("a的數(shù)值是%d\n",a); return 0; }
3. 局部變量
普通局部變量
概念:在函數(shù)內部定義的,或者復合語句中定義的變量
作用范圍:在函數(shù)中定義的變量,在函數(shù)中有效。在復合語句中定義的,在復合語句中有效
生命周期:在函數(shù)調用之前,局部變量不占用空間,調用的時候才為局部變量開辟空間,函數(shù)結束了,局部變量就釋放了。復合語句中也是如此。
#include<stdio.h> void myfunc(){ int a = 10; // 局部變量 printf("a的數(shù)值是%d\n",a); return; } int main(){ myfunc(); // printf("a的數(shù)值是%d\n",a); 這條語句是錯誤的,main不可以調用myfunc中的變量a return 0; }
靜態(tài)局部變量
概念:定義局部變量的時候,前面加static修飾
作用范圍:在它定義的函數(shù)或復合語句中有效
生命周期:第一次調用函數(shù)的時候,開辟空間賦值,函數(shù)結束后,不釋放,以后再調用函數(shù)的時候,就不再為其開辟空間,也不賦初值,用的是以前哪個變量。
#include<stdio.h> void myfunc(){ static int a = 10; // 靜態(tài)局部變量 printf("a的數(shù)值是%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關鍵字用來聲明多變的變量,這種變量的內容隨時可能被改變,而且這種改變的原因不是我們的語句造成的
到此這篇關于C語言由淺入深了解變量的應用的文章就介紹到這了,更多相關C語言變量內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Qt/C++編寫視頻監(jiān)控系統(tǒng)之自定義音柱顯示功能
通過音柱控件實時展示當前播放的聲音產生的振幅的大小,得益于音頻播放組件內置了音頻振幅的計算,可以動態(tài)開啟和關閉,開啟后會對發(fā)送過來的要播放的聲音數(shù)據(jù),這篇文章主要介紹了Qt/C++編寫視頻監(jiān)控系統(tǒng)之自定義音柱顯示功能,需要的朋友可以參考下2024-01-01C++實現(xiàn)LeetCode(14.最長共同前綴)
這篇文章主要介紹了C++實現(xiàn)LeetCode(14.最長共同前綴),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下2021-07-07C++面試八股文之std::string實現(xiàn)方法
這篇文章主要介紹了C++面試八股文:std::string是如何實現(xiàn)的,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06C++中靜態(tài)存儲區(qū)與棧以及堆的區(qū)別詳解
本篇文章是對C++中靜態(tài)存儲區(qū)與棧以及堆的區(qū)別進行了詳細的分析介紹,需要的朋友參考下2013-05-05C語言通過深度優(yōu)先搜索來解電梯問題和N皇后問題的示例
深度優(yōu)先搜索即是對一個新發(fā)現(xiàn)的節(jié)點上如果還關聯(lián)未探測到的邊,就沿此邊探測下去,直到發(fā)現(xiàn)從原點可達的所有點為止,這里我們就來展示C語言通過深度優(yōu)先搜索來解電梯問題和N皇后問題的示例2016-06-06