日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言const关键字—也许该被替换为readolny

發布時間:2023/12/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言const关键字—也许该被替换为readolny 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
const 是constant 的縮寫,是恒定不變的意思,也翻譯為常量、常數等。很不幸,正是因為這一點,很多人都認為被const 修飾的值是常量。這是不精確的,精確的說應該是只讀的變量,其值在編譯時不能被使用,因為編譯器在編譯時不知道其存儲的內容。或許當初這個關鍵字應該被替換為readonly。那么這個關鍵字有什么用處和意義呢?

const 推出的初始目的,正是為了取代預編譯指令,消除它的缺點,同時繼承它的優點。我們看看它與define 宏的區別。(很多人誤以為define 是關鍵字,在這里我提醒你再回到本章前面看看32 個關鍵字里是否有define)。

一、const 修飾的只讀變量

定義const 只讀變量,具有不可變性。例如:
? ?const intMax=100;
? ?intArray[Max];
這里請在Visual C++6.0 里分別創建.c 文件和.cpp 文件測試一下。你會發現在.c 文件中,編譯器會提示出錯,而在.cpp 文件中則順利運行。為什么呢?我們知道定義一個數組必須指定其元素的個數。這也從側面證實在C 語言中,const 修飾的Max 仍然是變量,只不過是只讀屬性罷了;而在C++里,擴展了const 的含義,這里就不討論了。

注意:const 修飾的只讀變量必須在定義的同時初始化,想想為什么?

留一個問題:case 語句后面是否可以是const 修飾的只讀變量呢?請動手測試一下。

二、節省空間,避免不必要的內存分配,同時提高效率

編譯器通常不為普通const 只讀變量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的值,沒有了存儲與讀內存的操作,使得它的效率也很高。例如:
? ?#define M 3 //宏常量
? ?const int N=5; //此時并未將N 放入內存中
? ?......
? ?int i=N; //此時為N 分配內存,以后不再分配!
? ?int I=M; //預編譯期間進行宏替換,分配內存
? ?int j=N; //沒有內存分配
? ?int J=M; //再進行宏替換,又一次分配內存!
const 定義的只讀變量從匯編的角度來看,只是給出了對應的內存地址,而不是象#define一樣給出的是立即數,所以,const 定義的只讀變量在程序運行過程中只有一份拷貝(因為它是全局的只讀變量,存放在靜態區),而#define 定義的宏常量在內存中有若干個拷貝。

#define 宏是在預編譯階段進行替換,而const 修飾的只讀變量是在編譯的時候確定其值。
#define 宏沒有類型,而const 修飾的只讀變量具有特定的類型。

三、修飾一般變量

一般常量是指簡單類型的只讀變量。這種只讀變量在定義時,修飾符const 可以用在類型說明符前,也可以用在類型說明符后。例如:
? ?int const i=2; 或const int i=2;

四、修飾數組

定義或說明一個只讀數組可采用如下格式:
? ?int const a[5]={1, 2, 3, 4, 5};或
? ?const int a[5]={1, 2, 3, 4, 5};

五、修飾指針

? ?const int *p; // p 可變,p 指向的對象不可變
? ?int const *p; // p 可變,p 指向的對象不可變
? ?int *const p; // p 不可變,p 指向的對象可變
? ?const int *const p; //指針p 和p 指向的對象都不可變
在平時的授課中發現學生很難記住這幾種情況。 這里給出一個記憶和理解的方法:先忽略類型名(編譯器解析的時候也是忽略類型名),我們看const 離哪個近。“近水樓臺先得月”,離誰近就修飾誰。
? ?const int *p; //const 修飾*p,p 是指針,*p 是指針指向的對象,不可變
? ?int const *p; //const修飾*p,p 是指針,*p 是指針指向的對象,不可變
? ?int *const p; //const修飾p,p 不可變,p 指向的對象可變
? ?const int *const p; //前一個const 修飾*p,后一個const 修飾p,指針p 和p 指向的對象都不可變

六、修飾函數的參數

const 修飾符也可以修飾函數的參數,當不希望這個參數值被函數體內意外改變時使用。例如:
? ?void Fun(const int i);
告訴編譯器i 在函數體中的不能改變,從而防止了使用者的一些無意的或錯誤的修改。

七、修飾函數的返回值

const 修飾符也可以修飾函數的返回值,返回值不可被改變。例如:
? ?const int Fun (void);

在另一連接文件中引用const 只讀變量:
? ?extern const int i; //正確的聲明
? ?extern const int j=10; //錯誤!只讀變量的值不能改變。

注意這里是聲明不是定義,關于聲明和定義的區別,請看本章開始處。

講了這么多講完了嗎?遠沒有。在C++里,對const 做了進一步的擴展,還有很多知識未能講完。有興趣的話,不妨查找相關資料研究研究。

總結

以上是生活随笔為你收集整理的C语言const关键字—也许该被替换为readolny的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99在线视频精品 | 夫妻露脸自拍[30p] | 少妇性xxxxxxxxx色武功 | 99国产精品一区二区三区 | 啪啪网站免费看 | 操操操爽爽爽 | 国产 丝袜 欧美中文 另类 | 久久小草 | 日韩av导航 | 中文有码视频 | 女性裸体瑜伽无遮挡 | 欧美高清视频一区二区 | 亚洲不卡在线播放 | 日韩欧美亚| 日本va在线 | 一区二区三区毛片 | 欧洲一区二区三区 | 中国少妇av | 99精品视频在线播放免费 | 小辣椒福利视频导航 | 免费毛片一区二区三区 | 欧美另类视频在线观看 | 黄色片视频在线观看 | 黄片毛片在线观看 | 竹菊影视日韩一区二区 | 国产一区二区免费在线观看 | 欧美视频亚洲 | 亚洲综合99 | 91国自产精品中文字幕亚洲 | 国产自在线拍 | 亚洲午夜激情视频 | 欧美另类videosbestsex | 好男人www在线视频 我们的2018在线观看免费高清 | 日韩视频a| 国产亚洲精品美女久久久久 | 啪啪小视频 | 国产精品久久久久9999爆乳 | 人妻激情文学 | 九九热播视频 | 一级片小视频 | 亚洲免费av网站 | 麻豆精品国产传媒av绿帽社 | 国产福利精品在线 | 上床视频在线观看 | 欧美精品亚洲一区 | 青春草在线视频观看 | 九九热国产| 女人裸体无遮挡 | 国产一线二线在线观看 | 国产一级做a爰片在线看免费 | 一级特黄妇女高潮2 | 92久久精品一区二区 | 日日夜夜狠狠爱 | 4色av| 中文字幕一区二区三区人妻四季 | 国产精品熟妇一区二区三区四区 | 精品国产乱码久久久久久闺蜜 | 污污视频在线观看网站 | 东京热毛片 | 亚洲国产精品女人久久久 | 91福利片 | 日日夜夜狠狠爱 | 91ts人妖另类精品系列 | 美日韩成人 | 香蕉视频官网 | av片在线免费观看 | 成人黄色小说在线观看 | 国产精品麻豆成人av电影艾秋 | 精品一区二区三区成人免费视频 | 欧美草比视频 | 中文字幕中文在线 | 91区国产| 欧美日韩一区二区三区电影 | 最污的网站 | 男人天堂2019 | 东方成人av在线 | 无码人中文字幕 | 国产尤物在线视频 | 精品国产乱码久久久久久1区二区 | 日韩一区二区三区电影 | 99中文字幕 | 国产中文字幕第一页 | 国产精品成 | 久精品视频 | 视频二区中文字幕 | 波多野结衣亚洲天堂 | 色妞综合| 91香蕉一区二区三区在线观看 | 国产一区视频在线免费观看 | 免费香蕉视频 | 邻居少妇张开双腿让我爽一夜 | 性生交大片免费看视频 | 美女超碰 | 欧美性网站 | 亚洲一级av毛片 | 成人看片泡妞 | 欧美xxxxx自由摘花 | 一区二区三区黄 | 欧美区国产区 |