C語(yǔ)言由淺入深了解變量的應(yīng)用
1. 變量的存儲(chǔ)類(lèi)別
內(nèi)存
- 物理內(nèi)存:實(shí)際的存儲(chǔ)設(shè)備
- 虛擬內(nèi)存:操作系統(tǒng)虛擬出來(lái)的內(nèi)存
- 操作系統(tǒng)會(huì)在物理內(nèi)存和虛擬內(nèi)存之間做映射。
- 在32位系統(tǒng)下,每個(gè)進(jìn)程的尋址范圍是4G, 0x00 00 00 00 ~ 0xff ff ff ff
- 在寫(xiě)應(yīng)用程序的時(shí)候,我們看到的都是虛擬地址
- 在32位操作系統(tǒng)中,虛擬內(nèi)存被分為兩個(gè)部分,3G的用戶(hù)空間和1G的內(nèi)核空間,其中用戶(hù)空間是當(dāng)前進(jìn)程私有的,內(nèi)核空間是一個(gè)系統(tǒng)中所有進(jìn)程公有的。
虛擬內(nèi)存分區(qū)(運(yùn)行程序時(shí)進(jìn)行分區(qū))
- 堆:在動(dòng)態(tài)申請(qǐng)內(nèi)存的時(shí)候在堆里開(kāi)辟內(nèi)存
- 棧:主要存放局部變量
- 靜態(tài)全局區(qū):(1)未初始化的靜態(tài)全局區(qū):靜態(tài)變量(定義便來(lái)嗯的時(shí)候,前面加static修飾),或全局變量,沒(méi)有初始化的,存在此區(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;
}
作用范圍:程序的所有地方,只不過(guò)用之前需要聲明,例如 extern int a;
生命周期:一直到程序運(yùn)行結(jié)束。
注意:定義普通全局變量時(shí),如果不賦值,默認(rèn)為0
靜態(tài)全局變量
概念:定義全局變量的時(shí)候,前面加一個(gè)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ù)合語(yǔ)句中定義的變量
作用范圍:在函數(shù)中定義的變量,在函數(shù)中有效。在復(fù)合語(yǔ)句中定義的,在復(fù)合語(yǔ)句中有效
生命周期:在函數(shù)調(diào)用之前,局部變量不占用空間,調(diào)用的時(shí)候才為局部變量開(kāi)辟空間,函數(shù)結(jié)束了,局部變量就釋放了。復(fù)合語(yǔ)句中也是如此。
#include<stdio.h>
void myfunc(){
int a = 10; // 局部變量
printf("a的數(shù)值是%d\n",a);
return;
}
int main(){
myfunc();
// printf("a的數(shù)值是%d\n",a); 這條語(yǔ)句是錯(cuò)誤的,main不可以調(diào)用myfunc中的變量a
return 0;
}
靜態(tài)局部變量
概念:定義局部變量的時(shí)候,前面加static修飾
作用范圍:在它定義的函數(shù)或復(fù)合語(yǔ)句中有效
生命周期:第一次調(diào)用函數(shù)的時(shí)候,開(kāi)辟空間賦值,函數(shù)結(jié)束后,不釋放,以后再調(diào)用函數(shù)的時(shí)候,就不再為其開(kāi)辟空間,也不賦初值,用的是以前哪個(gè)變量。
#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)鍵字用來(lái)聲明不可賦值的變量
#include<stdio.h>
int main(){
const int num;
num = 7; // 這條語(yǔ)句必報(bào)錯(cuò)
printf("num是%d\n",num);
return 0;
}
報(bào)錯(cuò)如下:

既然不可以賦值,那有什么用呢?可以在初始化的時(shí)候進(jìn)行賦值!
#include<stdio.h>
int main(){
const int num = 8;
printf("num是%d\n",num);
return 0;
}
5. volatile多變的變量
volatile關(guān)鍵字用來(lái)聲明多變的變量,這種變量的內(nèi)容隨時(shí)可能被改變,而且這種改變的原因不是我們的語(yǔ)句造成的
到此這篇關(guān)于C語(yǔ)言由淺入深了解變量的應(yīng)用的文章就介紹到這了,更多相關(guān)C語(yǔ)言變量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++開(kāi)發(fā)之PugiXML庫(kù)基礎(chǔ)用法示例詳解
PugiXML庫(kù)是一個(gè)功能強(qiáng)大、簡(jiǎn)單易用的C++ XML解析庫(kù),它提供了一組方便的函數(shù)來(lái)解析、創(chuàng)建和修改XML文檔,本文介紹了如何使用PugiXML庫(kù)來(lái)解析、創(chuàng)建和修改XML文檔,以及如何處理錯(cuò)誤和異常,感興趣的朋友跟隨小編一起看看吧2024-03-03
C語(yǔ)言實(shí)現(xiàn)英文文本詞頻統(tǒng)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)英文文本詞頻統(tǒng)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
C語(yǔ)言?超詳細(xì)總結(jié)講解二叉樹(shù)的概念與使用
二叉樹(shù)可以簡(jiǎn)單理解為對(duì)于一個(gè)節(jié)點(diǎn)來(lái)說(shuō),最多擁有一個(gè)上級(jí)節(jié)點(diǎn),同時(shí)最多具備左右兩個(gè)下級(jí)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)。本文將詳細(xì)介紹一下C++中二叉樹(shù)的概念和結(jié)構(gòu),需要的可以參考一下2022-04-04
C語(yǔ)言-I/O流設(shè)計(jì)實(shí)驗(yàn)
編程語(yǔ)言的I/O類(lèi)庫(kù)中常常使用流這個(gè)抽象的概念,它代表任何有能力產(chǎn)生數(shù)據(jù)的數(shù)據(jù)源對(duì)象或時(shí)有能力接收數(shù)據(jù)的接收端對(duì)象,本文為大家介紹C語(yǔ)言中I/O系統(tǒng)基礎(chǔ)知識(shí)2021-07-07

