国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 學(xué)習(xí)筆記 > 嵌入式學(xué)習(xí)筆記:C語(yǔ)言之變量、其生命周期、運(yùn)算符詳解

嵌入式學(xué)習(xí)筆記:C語(yǔ)言之變量、其生命周期、運(yùn)算符詳解 時(shí)間:2018-09-18      來(lái)源:未知

1、變量

定義:創(chuàng)建一個(gè)對(duì)象,為這個(gè)對(duì)象分配一塊內(nèi)存,并為它取一個(gè)名字,這個(gè)名字就叫做變量名;是對(duì)程序中數(shù)據(jù)的存儲(chǔ)空間的抽象。

存儲(chǔ)類(lèi)型 數(shù)據(jù)類(lèi)型 變量名;

描述:

一個(gè)變量可以通過(guò)不同種的方式來(lái)描述。

存儲(chǔ)期:

變量在內(nèi)存中的保存時(shí)間

作用域:

程序的哪些部分通過(guò)變量名來(lái)使用變量

鏈接點(diǎn):

程序的哪些部分通過(guò)變量名來(lái)使用變量

全局變量:也稱(chēng)為外部變量,定義在函數(shù)體外部的變量,不屬于哪個(gè)函數(shù),屬于整個(gè)

程序;

局部變量:也稱(chēng)為內(nèi)部變量,定義在函數(shù)體內(nèi)部的變量,只能在函數(shù)內(nèi)部使用;

存儲(chǔ)類(lèi)型:auto register static extern

auto:聲明的變量是自動(dòng)變量,聲明的變量存放在堆棧區(qū),而且auto可以省略。

register:寄存器型,聲明的變量放在CPU內(nèi)部的寄存器中,可以加快程序的運(yùn)

行速度,如果申請(qǐng)不到,同auto;

定義與聲明的區(qū)別:定義分配內(nèi)存,聲明不分配內(nèi)存;

extern:

1、聲明的變量必須是全局變量;

2、編譯時(shí)必須同時(shí)編譯兩個(gè)文件;

3、聲明的變量必須被定義過(guò)。

static:

1、修飾局部變量,如果該局部變量沒(méi)有被初始化,其值為0,并且該局部變量只會(huì)被初始化一次;生命周期發(fā)生改變。

注:局部變量如果沒(méi)有被初始化,其值為隨機(jī)值;

2、修飾全局變量,該全局變量只能在本文件內(nèi)使用;

3、修飾函數(shù)時(shí),該函數(shù)只能在本文件內(nèi)使用;

注:

1、具有外部鏈接的在其他文件使用前必須以exturn聲明

2、具有靜態(tài)存儲(chǔ)期的變量必須使用常量初始化(編譯階段獲得值)

-------與auto最大不同點(diǎn)是:static存儲(chǔ)類(lèi)型的變量在內(nèi)存中是以固定地址存放的,而不是以堆棧方式存放的;只要整個(gè)程序還在繼續(xù)運(yùn)行靜態(tài)變量就不會(huì)隨著說(shuō)明它的程序段的結(jié)束而消失,它下次再調(diào)用該函數(shù),該存儲(chǔ)類(lèi)型的變量不再重新說(shuō)明,而且還保留上次調(diào)

用存入的數(shù)值。

2、動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)存儲(chǔ)方式

變量還有另一種屬性——存儲(chǔ)期(storage duration,也稱(chēng)生命期)。存儲(chǔ)期是指變量在內(nèi)存中的存在期間。這是從變量值存在的時(shí)間角度來(lái)分析的。存儲(chǔ)期可以分為靜態(tài)存儲(chǔ)期(static storage duration)和動(dòng)態(tài)存儲(chǔ)期(dynamic storage duration)。這是由變量

的靜態(tài)存儲(chǔ)方式和動(dòng)態(tài)存儲(chǔ)方式?jīng)Q定的。

所謂靜態(tài)存儲(chǔ)方式是指在程序運(yùn)行期間,系統(tǒng)對(duì)變量分配固定的存儲(chǔ)空間。而動(dòng)態(tài)存儲(chǔ)方式則是在程序運(yùn)行期間,系統(tǒng)對(duì)變量動(dòng)態(tài)地分配存儲(chǔ)空間。

先看一下內(nèi)存中的供用戶(hù)使用的存儲(chǔ)空間的情況。這個(gè)存儲(chǔ)空間可以分為三部分,即:

程序區(qū)

靜態(tài)存儲(chǔ)區(qū)

動(dòng)態(tài)存儲(chǔ)區(qū)

數(shù)據(jù)分別存放在靜態(tài)存儲(chǔ)區(qū)和動(dòng)態(tài)存儲(chǔ)區(qū)中。全局變量全部存放在靜態(tài)存儲(chǔ)區(qū)中,在程序開(kāi)始執(zhí)行時(shí)給全局變量分配存儲(chǔ)單元,程序執(zhí)行完畢就釋放這些空間。在程序執(zhí)行過(guò)程中它們占據(jù)固定的存儲(chǔ)單元,而不是動(dòng)態(tài)地進(jìn)行分配和釋放。

在動(dòng)態(tài)存儲(chǔ)區(qū)中存放以下數(shù)據(jù):

函數(shù)形式參數(shù)。在調(diào)用函數(shù)時(shí)給形參分配存儲(chǔ)空間。

函數(shù)中的自動(dòng)變量(未加static聲明的局部變量,詳見(jiàn)后面的介紹)。

函數(shù)調(diào)用時(shí)的現(xiàn)場(chǎng)保護(hù)和返回地址等。

對(duì)以上這些數(shù)據(jù),在函數(shù)調(diào)用開(kāi)始時(shí)分配動(dòng)態(tài)存儲(chǔ)空間,函數(shù)結(jié)束時(shí)釋放這些空間。在程序執(zhí)行過(guò)程中,這種分配和釋放是動(dòng)態(tài)的,如果在一個(gè)程序中兩次調(diào)用同一函數(shù),則要進(jìn)行兩次分配和釋放,而兩次分配給此函數(shù)中局部變量的存儲(chǔ)空間地址可能是不相同

的。

如果在一個(gè)程序中包含若干個(gè)函數(shù),每個(gè)函數(shù)中的局部變量的存儲(chǔ)期并不等于整個(gè)程序的執(zhí)行周期,它只是整個(gè)程序執(zhí)行周期的一部分。根據(jù)函數(shù)調(diào)用的情況,系統(tǒng)對(duì)局部變量動(dòng)態(tài)地分配和釋放存儲(chǔ)空間。

在C++中變量除了有數(shù)據(jù)類(lèi)型的屬性之外,還有存儲(chǔ)類(lèi)別(storage class) 的屬性。存儲(chǔ)類(lèi)別指的是數(shù)據(jù)在內(nèi)存中存儲(chǔ)的方法。存儲(chǔ)方法分為靜態(tài)存儲(chǔ)和動(dòng)態(tài)存儲(chǔ)兩大類(lèi)。具體包含4種:自動(dòng)的(auto)、靜態(tài)的(static)、寄存器的(register)和外部的(extern)。根據(jù)變量的存儲(chǔ)類(lèi)別,可以知道變量的作用域和存儲(chǔ)期。對(duì)靜態(tài)局部變量的說(shuō)明:

靜態(tài)局部變量在靜態(tài)存儲(chǔ)區(qū)內(nèi)分配存儲(chǔ)單元。在程序整個(gè)運(yùn)行期間都不釋放。而自動(dòng)變量(即動(dòng)態(tài)局部變量)屬于動(dòng)態(tài)存儲(chǔ)類(lèi)別,存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū)空間(而不是靜態(tài)存儲(chǔ)區(qū)空間),函數(shù)調(diào)用結(jié)束后即釋放。

為靜態(tài)局部變量賦初值是在編譯時(shí)進(jìn)行值的,即只賦初值一次,在程序運(yùn)行時(shí)它已有初值。以后每次調(diào)用函數(shù)時(shí)不再重新賦初值而只是保留上次函數(shù)調(diào)用結(jié)束時(shí)的值。而為自動(dòng)變量賦初值,不是在編譯時(shí)進(jìn)行的,而是在函數(shù)調(diào)用時(shí)進(jìn)行,每調(diào)用一次函數(shù)重新給一次初值,相當(dāng)于執(zhí)行一次賦值語(yǔ)句。

如果在定義局部變量時(shí)不賦初值的話(huà),對(duì)靜態(tài)局部變量來(lái)說(shuō),編譯時(shí)自動(dòng)賦初值0(對(duì)數(shù)值型變量)或空字符(對(duì)字符型變量)。而對(duì)自動(dòng)變量來(lái)說(shuō),如果不賦初值,則它的值是一個(gè)不確定的值。這是由于每次函數(shù)調(diào)用結(jié)束后存儲(chǔ)單元已釋放,下次調(diào)用時(shí)又重新另分

配存儲(chǔ)單元,而所分配的單元中的值是不確定的。

雖然靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后仍然存在,但其他函數(shù)是不能引用它的,也就是說(shuō),在其他函數(shù)中它是“不可見(jiàn)”的。

3、生命周期與作用域

局部變量:

生命周期:從定義開(kāi)始,到該模塊結(jié)束

作用域:該模塊內(nèi)

static修飾的局部變量:

生命周期:從定義開(kāi)始,到整個(gè)程序結(jié)束

作用域:該模塊內(nèi)

全局變量:

生命周期:從定義開(kāi)始,到整個(gè)程序結(jié)束

作用域:該程序內(nèi)

static修飾的全局變量:

生命周期:從定義開(kāi)始,到整個(gè)程序結(jié)束

作用域:該文件內(nèi)

注:全局變量如果沒(méi)有被初始化,其值為0;全局變量要慎用,原因有兩個(gè):

1、命名重復(fù)

2、其他函數(shù)可能違背意圖將其值改變

4、類(lèi)型轉(zhuǎn)換

1、隱式類(lèi)型轉(zhuǎn)換

(1)低字節(jié)數(shù)向高字節(jié)數(shù)轉(zhuǎn)換

(2)有符號(hào)數(shù)向無(wú)符號(hào)數(shù)轉(zhuǎn)換(int ---> unsigned int)

2、強(qiáng)制類(lèi)型轉(zhuǎn)換

(數(shù)據(jù)類(lèi)型)變量名;

注:不管是隱式類(lèi)型轉(zhuǎn)換還是強(qiáng)制類(lèi)型轉(zhuǎn)換,實(shí)際上變量的類(lèi)型并沒(méi)有發(fā)生變化,只是在運(yùn)算的過(guò)程當(dāng)中發(fā)生了轉(zhuǎn)換。

5、運(yùn)算符

算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符

1、算術(shù)運(yùn)算符:+ - * / % ++ --

%:取模運(yùn)算,小數(shù)沒(méi)有取模運(yùn)算

++

int a = 5;

int b

= a++;

a = 7, b = 5, c = 7

注:

++在前,先賦值,后運(yùn)算

++在后,先運(yùn)算,后賦值

當(dāng)++單獨(dú)成一條語(yǔ)句時(shí),++在前和在后沒(méi)有區(qū)別;

2、關(guān)系運(yùn)算符 > < >= <= == !=

注:

=為賦值運(yùn)算符

==為等于號(hào)

if(5 == a)

3、邏輯運(yùn)算符 && || !

表達(dá)式1 && 表達(dá)式2

表達(dá)式1和表達(dá)式2同時(shí)成立,整個(gè)表達(dá)式才成立,只要其中有一個(gè)不成立,整個(gè)表達(dá)式就為假

截?cái)喾▌t:當(dāng)&&左邊為假時(shí),其值一定為假,所以&&右邊就不執(zhí)行

表達(dá)式1 || 表達(dá)式2

||兩邊同時(shí)為假時(shí),其值才為假,只要有一邊表達(dá)式為真,其值一定為真截?cái)喾▌t:當(dāng)||左邊為真時(shí),其值一定為真,右邊不執(zhí)行

4、位運(yùn)算符:~ & | ^ >> <<

~00001111 11110000

&:00100010

10110000

00100000

1)、判斷某個(gè)數(shù)的某一位或某幾位是0還是1

10011011 判斷第四位是0還是1

& 00010000

00010000

2)、清除某個(gè)數(shù)的某一位或某幾位

10011011 清除第3到5位

& 11000111

10000011

3)、設(shè)置某個(gè)數(shù)的某一位或某幾位 (先清0,后設(shè)置)先與后或

10011011 設(shè)置第3到5位為101

& 11000111

| 00101000 10101011

^:兩個(gè)位進(jìn)行異或時(shí),相同為0,不同為1

一個(gè)數(shù)與0相異或,結(jié)果是其本身

翻轉(zhuǎn)某個(gè)數(shù)的某一位段

1100 0001 翻轉(zhuǎn)第3到5位

^ 00111000

11111001

>>:右移

1、溢出部分不要

2、高位:正數(shù) 高位補(bǔ)0

負(fù)數(shù) 補(bǔ)1

<<:左移

1、溢出時(shí),溢出部分不要,右邊補(bǔ)0

2、如果是有符號(hào)數(shù),可能會(huì)引起符號(hào)位的改變

5、逗號(hào)運(yùn)算符:

表達(dá)式1,表達(dá)式2;

其求值過(guò)程是分別求兩個(gè)表達(dá)式的值,并以表達(dá)式2的值作為整個(gè)逗號(hào)表達(dá)

式的值。

表達(dá)式1,表達(dá)式2,表達(dá)式3,。。。。。。。。表達(dá)式n;

每個(gè)表達(dá)式都會(huì)執(zhí)行,并把表達(dá)式n的值作為整個(gè)表達(dá)式的值。

上一篇:嵌入式學(xué)習(xí)筆記:數(shù)據(jù)的輸入輸出

下一篇:嵌入式學(xué)習(xí)筆記:守護(hù)進(jìn)程,線程詳解

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專(zhuān)線:010-82525158 企業(yè)培訓(xùn)洽談專(zhuān)線:010-82525379 院校合作洽談專(zhuān)線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見(jiàn)科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5,京公海網(wǎng)安備11010802025203號(hào)

回到頂部