日韩在线免费播放-日韩在线免费av-日韩在线免费-日韩在线毛片-国产高清不卡视频-国产高清不卡

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

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

1、變量

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

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

描述:

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

存儲(chǔ)期:

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

作用域:

程序的哪些部分通過變量名來使用變量

鏈接點(diǎn):

程序的哪些部分通過變量名來使用變量

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

程序;

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

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

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

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

行速度,如果申請不到,同auto;

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

extern:

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

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

3、聲明的變量必須被定義過。

static:

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

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

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

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

注:

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

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

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

用存入的數(shù)值。

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

變量還有另一種屬性——存儲(chǔ)期(storage duration,也稱生命期)。存儲(chǔ)期是指變量在內(nèi)存中的存在期間。這是從變量值存在的時(shí)間角度來分析的。存儲(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)對變量分配固定的存儲(chǔ)空間。而動(dòng)態(tài)存儲(chǔ)方式則是在程序運(yùn)行期間,系統(tǒng)對變量動(dòng)態(tài)地分配存儲(chǔ)空間。

先看一下內(nèi)存中的供用戶使用的存儲(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ū)中,在程序開始執(zhí)行時(shí)給全局變量分配存儲(chǔ)單元,程序執(zhí)行完畢就釋放這些空間。在程序執(zhí)行過程中它們占據(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聲明的局部變量,詳見后面的介紹)。

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

對以上這些數(shù)據(jù),在函數(shù)調(diào)用開始時(shí)分配動(dòng)態(tài)存儲(chǔ)空間,函數(shù)結(jié)束時(shí)釋放這些空間。在程序執(zhí)行過程中,這種分配和釋放是動(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)對局部變量動(dòng)態(tài)地分配和釋放存儲(chǔ)空間。

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

靜態(tài)局部變量在靜態(tài)存儲(chǔ)區(qū)內(nèi)分配存儲(chǔ)單元。在程序整個(gè)運(yùn)行期間都不釋放。而自動(dòng)變量(即動(dòng)態(tài)局部變量)屬于動(dòng)態(tài)存儲(chǔ)類別,存儲(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í)行一次賦值語句。

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

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

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

3、生命周期與作用域

局部變量:

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

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

static修飾的局部變量:

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

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

全局變量:

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

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

static修飾的全局變量:

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

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

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

1、命名重復(fù)

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

4、類型轉(zhuǎn)換

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

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

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

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

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

注:不管是隱式類型轉(zhuǎn)換還是強(qiáng)制類型轉(zhuǎn)換,實(shí)際上變量的類型并沒有發(fā)生變化,只是在運(yùn)算的過程當(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ù)沒有取模運(yùn)算

++

int a = 5;

int b

= a++;

a = 7, b = 5, c = 7

注:

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

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

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

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

注:

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

==為等于號

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、如果是有符號數(shù),可能會(huì)引起符號位的改變

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

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

其求值過程是分別求兩個(gè)表達(dá)式的值,并以表達(dá)式2的值作為整個(gè)逗號表達(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)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號-5京公海網(wǎng)安備11010802025203號

回到頂部

主站蜘蛛池模板: 时来运转电影| 刑三狗| 在线黄网站| 最后的武士| 恩齐| 健康中国科普先行直播回放| 村暖花开| 未删减视频| 寡妇年| 大森静香| 你是我的玫瑰花简谱| jagger| 骆文博| 北京卫视今日播出节目表| 爱一个人好难吉他谱| 美女网站免费观看视频| 五年级下册第四单元语文园地| 车震电影| 孤掷一注在线观看| 风平浪静电影| 鼻子旁边长痘是什么原因造成的| 母亲电影韩国完整版免费观看| fate动漫免费观看| 夜店 电影| 希望online| 天下第一剑| 电影《在云端》| 肚子上拨罐能减肥吗| 布里特·艾克拉诺| 玉匣记白话全书| 女性频道| 欧美一级毛片免费看| 红灯停绿灯行电影观看| 在线观看中文字幕视频| 陈颖芝三级| 布袋头| 啊嗯啊| 露底| 五年级上册口算| 公司减资从1000万减到10万| 母亲韩国|