精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言類型修飾符Const的教程使用說明

電子設計 ? 2018-09-20 09:37 ? 次閱讀

Const也是應該廣泛的關鍵字,表示后面定義有可能是一個不變的常量,但是跟各種數據類型定義組合,能演變出復雜含義。常類型是指使用類型修飾符const說明的類型,常類型的變量或對象的值是不能被更新的。const 推出的初始目的,正是為了取代預編譯指令,消除它的缺點,同時繼承它的優點。

Const 主要有如下應用情況

1. 聲明后面是一個常量

2. 如果跟指針組合,將形成復雜的組合情況

3. 作函數參數數的修飾符。表示不能修改這一參數的值。主要是指針

4. 作函數返回值, 表示調用函數不能修改這一參數數的值。主要是指針

Const 讓人感到復雜是的,他的位置可以與被修飾的數據類型互換!其它的修飾符沒有這樣用法。這樣換一般情況下是等效的, 如 const int c1= 5; 等效于 int const c1=5;但是,我說是但是,如果數據類型是一個指針,互換一樣位置表示完全不同含義,所以const 這 一個用法經常是面試官用來折磨嵌入式C面試者的法寶之一。 參看如下定義 int b = 500; const int* a = &b; [1] int const *a = &b; [2] int* const a = &b; [3] const int* const a = &b; [4] 這種定義要看 const 的位置來確定他的用法。 const位于星號的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;如果const位于星號的 右側,const就是修飾指針本身,即指針本身是常量。因此,[1]和[2]的情況相同,都是指針所指向的內容為常量(const放在變量聲明符的位置無 關),這種情況下不允許對指針指向內容進行更改操作,如不能*a = 3 ;[3]為指針本身是常量,而指針所指向的內容不是常量,這種情況下不能對指針本身進行更改操作,如a++是錯誤的;[4]為指針本身和指向的內容均為常 量。

Const的初始化 Const 在運行時不能修改值,所以只能在定義時進行初始化。 作為參數和返回值的const修飾符 其實,不論是參數還是返回值,道理都是一樣的,參數傳入時候和函數返回的時候,初始化const變量 1 修飾參數的const,如 void fun0(const A* a );表示a的指向內容不準修改的。 2 修飾返回值的const,如const A * fun2( );表示a指南內容不準備修改。

Const 的好處是

?關鍵字const的作用是為給讀你代碼的人傳達非常有用的信息,實際上,聲明一個參數為常量是為了告訴了用戶這個參數的應用目的。如果你曾花很多時間清理其它人留下的垃圾,你就會很快學會感謝這點多余的信息。(當然,懂得用const的程序員很少會留下的垃圾讓別人來清理的。)

? 通過給優化器一些附加的信息,使用關鍵字const也許能產生更緊湊的代碼。

? 合理地使用關鍵字const可以使編譯器很自然地保護那些不希望被改變的參數,防止其被無意的代碼修改。簡而言之,這樣可以減少bug的出現。 Const 一大副作用是,在函數調用時,你必須要把參數調成const 所要求的形式才能被編譯調用。有時這樣花很大功夫才能做到。

C++ const用法說明

C++ const 允許指定一個語義約束,編譯器會強制實施這個約束,允許程序員告訴編譯器某值是保持不變的。如果在編程中確實有某個值保持不變,就應該明確使用const,這樣可以獲得編譯器的幫助。

1.const 修飾成員變量

#include《iostream》

using namespace std;

int main(){

int a1=3; ///non-const data

const int a2=a1; ///const data

int * a3 = &a1; ///non-const data,non-const pointer

const int * a4 = &a1; ///const data,non-const pointer

int * const a5 = &a1; ///non-const data,const pointer

int const * const a6 = &a1; ///const data,const pointer

const int * const a7 = &a1; ///const data,const pointer

return 0;

}

const修飾指針變量時:

(1)只有一個const,如果const位于*左側,表示指針所指數據是常量,不能通過解引用修改該數據;指針本身是變量,可以指向其他的內存單元。

(2)只有一個const,如果const位于*右側,表示指針本身是常量,不能指向其他內存地址;指針所指的數據可以通過解引用修改。

(3)兩個const,*左右各一個,表示指針和指針所指數據都不能修改。

2.const修飾函數參數

傳遞過來的參數在函數內不可以改變,與上面修飾變量時的性質一樣。

void testModifyConst(const int _x) {

_x=5;///編譯出錯

}

3.const修飾成員函數

(1)const修飾的成員函數不能修改任何的成員變量(mutable修飾的變量除外)

(2)const成員函數不能調用非onst成員函數,因為非const成員函數可以會修改成員變量

#include 《iostream》

using namespace std;

class Point{

public

Point(int _x):x(_x){}

void testConstFunction(int _x) const{

///錯誤,在const成員函數中,不能修改任何類成員變量

x=_x;

///錯誤,const成員函數不能調用非onst成員函數,因為非const成員函數可以會修改成員變量

modify_x(_x);

}

void modify_x(int _x){

x=_x;

}

int x;

};

4.const修飾函數返回值

(1)指針傳遞

如果返回const data,non-const pointer,返回值也必須賦給const data,non-const pointer。因為指針指向的數據是常量不能修改。

const int * mallocA(){ ///const data,non-const pointer

int *a=new int(2);

return a;

}

int main()

{

const int *a = mallocA();

///int *b = mallocA(); ///編譯錯誤

return 0;

}

(2)值傳遞

如果函數返回值采用“值傳遞方式”,由于函數會把返回值復制到外部臨時的存儲單元中,加const 修飾沒有任何價值。所以,對于值傳遞來說,加const沒有太多意義。

所以:

不要把函數int GetInt(void) 寫成const int GetInt(void)。

不要把函數A GetA(void) 寫成const A GetA(void),其中A 為用戶自定義的數據類型。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7575

    瀏覽量

    134017
  • CONST
    +關注

    關注

    0

    文章

    43

    瀏覽量

    8125
收藏 人收藏

    評論

    相關推薦

    C語言之正確使用Const

    ,只不過這個值由編譯器限定不允許被修改。C語言關鍵字const就是用來限定一個變量不允許被改變的修飾符(Qualifier)。上述代碼中變量n被修飾
    發表于 10-07 11:20

    C語言——正確使用const

    這個值由編譯器限定不允許被修改。C語言關鍵字const就是用來限定一個變量不允許被改變的修飾符(Qualifier)。上述代碼中變量n被修飾
    發表于 04-23 11:58

    請問C++代碼的修飾符該怎么理解?

    有如下的代碼段,寫出下面除了宏定義外的其他代碼的真實代碼(即預處理后的代碼)。然后寫出對const修飾符的理解(當前的代碼用于單片機中):#define DECL_PC_CMD_FUN(name
    發表于 11-11 04:35

    請問什么是正則表達式修飾符

    什么是正則表達式的修飾符
    發表于 11-04 06:10

    【原創】帶你在單片機編程中熟練使用const

    const可以用在類型說明符前,也可以用在類型說明符后例如:intconsti = 2; 或 constinti=2;4、
    發表于 06-15 11:00

    C51語言的變量定義方式

    C51 語言的變量定義定義方式:普通變量:(修飾符)數據類型 [存儲類型] 變量名 [= 值]指針變量: (
    發表于 12-01 06:18

    HAL庫中__weak修飾符是什么?

    單片機系統時鐘是什么?HAL庫中__weak修飾符是什么?
    發表于 02-23 07:32

    C語言類型修飾符Volatile的使用說明

    C語言是我們經常需要用到的語言,C語言中的類型修飾符
    的頭像 發表于 09-19 10:54 ?3457次閱讀

    如何學習c語言?C語言學習筆記資料免費下載

    本文檔的主要內容詳細介紹的是如何學習c語言?C語言學習筆記資料免費下載內容包括了:C語言代碼,編
    發表于 10-17 16:23 ?65次下載

    C語言教程之數據類型與運算的詳細資料說明

    本文檔的主要內容詳細介紹的是C語言教程之數據類型與運算的詳細資料說明主要內容包括了:數據類型
    發表于 03-01 17:20 ?8次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>教程之數據<b class='flag-5'>類型</b>與運算<b class='flag-5'>符</b>的詳細資料<b class='flag-5'>說明</b>

    一種修飾符能使變量在處理器復位而不被初始化

    有一種修飾符能使變量在處理器復位而不被初始化
    的頭像 發表于 03-14 15:01 ?3843次閱讀
    一種<b class='flag-5'>修飾符</b>能使變量在處理器復位而不被初始化

    C51 單片機的 C 語言中的變量定義與硬件之間的關系

    C51 語言的變量定義定義方式:普通變量:(修飾符)數據類型 [存儲類型] 變量名 [= 值]指針變量: (
    發表于 11-23 16:51 ?3次下載
    <b class='flag-5'>C</b>51 單片機的 <b class='flag-5'>C</b> <b class='flag-5'>語言</b>中的變量定義與硬件之間的關系

    C#中的兩個泛型修飾符

    C#中,存在兩個泛型修飾符:in和out,他們分別對應逆變委托和協變委托。 我們知道,在C#中要想將一個泛型對象轉換為另一個泛型對象時,必須要將一個泛型對象拆箱,對元素進行顯式或隱式轉換后重新
    的頭像 發表于 01-14 11:48 ?950次閱讀

    Java四種訪問修飾符及訪問范圍

    public修飾的類、類屬變量及方法,包內及包外的任何類均可以訪問;任何情況下都可以訪問;如果一個類、類屬變量及方法沒有用任何修飾符,則其訪問權限為默認權限,只認包。同包下可以訪問,同包下子類可以訪問,只要不同包,普通類和子類都不能訪問。
    的頭像 發表于 02-28 14:35 ?6403次閱讀

    淺析C語言中的變量修飾符

    一、修飾符類型51單片機采用哈佛結構。內存空間編址有重疊??梢栽诓煌偩€上定義不同的變量。在KEILC51中定義了data、idata、xdata、code幾種域修飾符。這些修飾符決定
    的頭像 發表于 04-15 08:10 ?333次閱讀
    淺析<b class='flag-5'>C</b><b class='flag-5'>語言</b>中的變量<b class='flag-5'>修飾符</b>