




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第C語言const關(guān)鍵字的用法詳解目錄1介紹1.1const修飾變量1.2const修飾數(shù)組1.3const修飾指針1.4const修飾函數(shù)參數(shù)2const對程序的影響3總結(jié)
1介紹
const關(guān)鍵字是constant的縮寫,翻譯為常量、常數(shù)。在C語言中const的作用很強(qiáng)大,它可以修飾變量、數(shù)組、指針、函數(shù)參數(shù)等。
1.1const修飾變量
const修飾變量,表示希望此變量具有只讀性,防止被直接直接修改。
//const關(guān)鍵字是constant的縮寫,翻譯為常量、常數(shù)。
//在C語言中const的作用很強(qiáng)大,它可以修飾變量、數(shù)組、指針、函數(shù)參數(shù)等。
#includestdio.h
intmain()
constintnum=100;
num=20;
printf("%d\n",num);
}
發(fā)現(xiàn)const修飾的變量,隨后試圖修改num的值,結(jié)果出現(xiàn)紅色波浪線,編譯器提醒我們:表達(dá)式必須是可修改的左值。
所以我們得出結(jié)論:const修飾的變量,不能被修改。
const修飾的變量就一定不能被修改嗎???
constintnum=100;
int*p=num;
*p=20;
printf("%d\n",num);
運行結(jié)果
通過上圖我們發(fā)現(xiàn)num的值被修改了,通過指針可以間接的修改const修飾的變量。
但是運行時會出現(xiàn)警告:warningC4090:初始化:不同的const限定符。
是因為num類型是const修飾,但是p是整型指針變量,
類型不同。所以通過下面強(qiáng)轉(zhuǎn)就沒警告了。
改進(jìn)后的代碼
constintnum=100;
int*p=(int*)num;
*p=20;
printf("%d\n",num);
總結(jié):const修飾的變量不能被直接修改
1.2const修飾數(shù)組
#includestdio.h
intmain()
constintarray[5]={0,1,2,3,4};
array[0]=100;
}
表示const修飾的數(shù)組也不能被修改。
通過上面1.1const修飾變量的分析,同理也聯(lián)想到:指針是否可以修改數(shù)組的內(nèi)容。結(jié)果如下:
#includestdio.h
intmain()
constintarray[5]={0,1,2,3,4};
//array[0]=100;
int*p=array;
*p=100;
printf("%d\n",array[0]);
}
不難發(fā)現(xiàn),指針可以修改。和1.1節(jié)出現(xiàn)結(jié)果一樣,同樣運行時程序出現(xiàn)了警告:warningC4090:初始化:不同的const限定符,同樣的警告出現(xiàn)了。
經(jīng)過強(qiáng)轉(zhuǎn)后:
#includestdio.h
intmain()
constintarray[5]={0,1,2,3,4};
//array[0]=100;
int*p=(int*)array;//array原本的數(shù)據(jù)類型為constint[5]
*p=100;
printf("%d\n",array[0]);
}
總結(jié):const修飾數(shù)組時,其值不能被直接修改
1.3const修飾指針
此部分分為兩種情況去分析:
#includestdio.h
intmain()
inta=100;
constint*p=
*p=1000;
printf("%d\n",a);
}
此時,通過上圖容易發(fā)現(xiàn)const修飾指針指向的內(nèi)容一旦修改,就會自動報錯,所以*p(指針指向的內(nèi)容不能被修改),但指針變量p本身是可以被修改的。
#includestdio.h
intmain()
inta=100;
int*constp=//p的數(shù)據(jù)類型為int*const
*p=1000;
printf("%d\n",a);
}
此時,const修飾的是指針p本身,所以指針本身不能被修改,但是指針?biāo)赶虻膬?nèi)容*p可被修改
1.4const修飾函數(shù)參數(shù)
#includestdio.h
intmyFunc(constint*p)
*p=*p+1;
return*p;
}
const修飾函數(shù)參數(shù),對參數(shù)起到限定的作用,通過發(fā)現(xiàn)指針也能修改其值。
總結(jié):const修飾函數(shù)參數(shù),本質(zhì)上和修飾變量和指針一樣。表示其值不能被直接修改。
2const對程序的影響
可以發(fā)現(xiàn),在*p下面出現(xiàn)了紅色波浪線,讓上述的錯誤提前出現(xiàn),避免程序在運行時出錯。
總結(jié):編譯器可以對const修飾的變量進(jìn)行合理性檢查,讓錯誤提前出現(xiàn)。
3總結(jié)
通過這篇博客,我對const修飾變量、數(shù)組、指著和函數(shù)參數(shù)進(jìn)行了歸納總結(jié)??傮w來說有幾個點需要注意:
const修飾變量,不能被直接修改
const修飾指針指向的內(nèi)容時(constint*p=a),指針指向內(nèi)容(*p)不能被修改,但指針本身(p)可以被修改。
const修飾指針本身時(int*constp=a),指針指向的內(nèi)容(*p)可以被修改,但是指針本身(p)不能被修改。
const修飾字符串(const*p=abcd)和(constp[]=abcd)這兩種情況的分析,前者字符串不能修改,后者字符串可以修改。這是由C語言使用存儲器的方式?jīng)Q定的。
補(bǔ)充內(nèi)容
char*cards=JQK的情況下計算機(jī)操作的步驟:
計算機(jī)做的步驟:
計算機(jī)加載字符串字面值:
當(dāng)計算機(jī)把程序載入存儲器時,會把所有常數(shù)值(如字符串常量JQK)放到常量存儲區(qū),這部分存儲器是只讀的。
程序在棧上創(chuàng)建cards變量
棧是存儲器中計算機(jī)用來保存局部變量的部分,局部變量也就是位于函數(shù)內(nèi)部的變量,cards變量就在這個地方。
cards變量設(shè)為JQK的地址
cards變量將會保存字符串字面值JQK的地址。為了防止修改,字符串字面值通常保存在只讀存儲器中。
計算機(jī)試圖修改字符串
程序試圖修改cards變量指向的字符串中的內(nèi)容時就會失敗,因為字符串是只讀的。
charcards[]=JQK的情況下計算機(jī)操作的步驟:
計算機(jī)加載字符串字面值:
當(dāng)計算機(jī)把程序載入存儲器時,會把所有常數(shù)值(如字符串常量JQK)放到常量存儲區(qū),這部分存儲器是只讀的。
程序在棧上新建了一個數(shù)組
我們聲明了數(shù)組,所以程序會創(chuàng)建一個足夠大的數(shù)組來保存字符串JQK
程序初始化數(shù)組
除了為數(shù)組分配空間,程序還會把字符串字面值JQK的內(nèi)容復(fù)制到棧上。
補(bǔ)充內(nèi)容
char*cards=JQK的情況下計算機(jī)操作的步驟:
計算機(jī)做的步驟:
計算機(jī)加載字符串字面值:
當(dāng)計算機(jī)把程序載入存儲器時,會把所有常數(shù)值(如字符串常量JQK)放到常量存儲區(qū),這部分存儲器是只讀的。
程序在棧上創(chuàng)建cards變量
棧是存儲器中計算機(jī)用來保存局部變量的部分,局部變量也就是位于函數(shù)內(nèi)部的變量,cards變量就在這個地方。
cards變量設(shè)為JQK的地址
cards變量將會保存字符串字面值JQK的地址。為了防止修改,字符串字面值通常保存在只讀存儲器中。
計算機(jī)試圖修改字符串
程序試圖修改cards變量指向的字符串中的內(nèi)容時就會失敗,因為字符串是只讀的。
charcards[]=JQK的情況下計算機(jī)操作的步驟:
計算機(jī)加載字符串字面值:
當(dāng)計算機(jī)把程序載入存儲器時,會把所有常數(shù)值(如字符串常量JQK)放到常量存儲區(qū),這部分存儲器是只讀的。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 包獵頭公司管理制度
- 2025年考前沖刺的系統(tǒng)分析師考試試題及答案
- 混凝土現(xiàn)場管理制度
- 施工倉庫退貨管理制度
- 弱電維修人員管理制度
- 水壺生產(chǎn)品質(zhì)管理制度
- 政府采購公司管理制度
- 充電場站管理制度
- 教室衛(wèi)生安全管理制度
- 企業(yè)報價管理制度
- 豬睪丸支持細(xì)胞外泌體攝取能力的多因素解析與機(jī)制探究
- 2024年10月高等教育自學(xué)考試《00034社會學(xué)概論》試題
- 理論聯(lián)系實際闡述文化在社會發(fā)展中具有什么樣的作用?參考答案四
- 華為HRBP轉(zhuǎn)型方案
- DB31/T 938-2015電子商務(wù)服務(wù)平臺售后服務(wù)規(guī)范
- 明清時期科技與文化課件統(tǒng)編版七年級歷史下冊
- 運維服務(wù)保密協(xié)議書
- 《學(xué)前兒童語言教育》課件-第2章 學(xué)前兒童語言的獲得與發(fā)展
- 中原鄉(xiāng)鎮(zhèn)櫻桃溝鄉(xiāng)村振興景觀概念性規(guī)劃方案【鄉(xiāng)村文旅】【鄉(xiāng)村振興】【鄉(xiāng)村景觀規(guī)劃】
- 【9化 二?!亢颖毙吓_邯鄲2025年5月中考二模九年級化學(xué)試卷
- 2025-2030年中國夜視攝像機(jī)行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
評論
0/150
提交評論