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