教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢(xún)/投訴熱線:400-618-4000

c/c++培訓(xùn)之C++ 語(yǔ)言const與C語(yǔ)言的對(duì)比

更新時(shí)間:2016年08月01日09時(shí)50分 來(lái)源:傳智播客C/C++學(xué)科 瀏覽次數(shù):

C++ 語(yǔ)言const與C語(yǔ)言的對(duì)比
 
在<C++ 語(yǔ)言對(duì)C語(yǔ)言的增強(qiáng)(一)>中,講解了(1)C++ 的實(shí)用性增強(qiáng)(2)變量檢測(cè)增強(qiáng)(3)C++中所有變量和函數(shù)都必須有類(lèi)型(4)struct 類(lèi)型增強(qiáng);詳情請(qǐng)點(diǎn)擊http://bbs.itcast.cn/forum.php?mod=viewthread&tid=87326&fromuid=324757
在< C++ 語(yǔ)言對(duì)C語(yǔ)言的增強(qiáng)(二)>中,我們講解了(1)新增的bool運(yùn)算符;(2)三目運(yùn)算符的增強(qiáng);(3)C++中真正的枚舉。詳情請(qǐng)點(diǎn)擊<請(qǐng)編輯老師放入上次的鏈接>。今天我們來(lái)看一下C++中const與C語(yǔ)言中的不同。
  1. 什么是const?
const是一個(gè)C語(yǔ)言(ANSI C)的關(guān)鍵字,它限定一個(gè)變量不允許被改變,產(chǎn)生靜態(tài)作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在觀看別人代碼的時(shí)候,清晰理解const所起的作用,對(duì)理解對(duì)方的程序也有一些幫助。另外CONST在其他編程語(yǔ)言中也有出現(xiàn),如C++、PHP5、B#.net、HC08 C、C#。(以上解釋來(lái)自百度百科)
  1. Const的基本用法
const int a;
int const b;
//第?個(gè)第?個(gè)意思?樣 代表?個(gè)常整形數(shù)
const int *c;
//第三個(gè) const 修飾的 *c,即c是?個(gè)指向常整形數(shù)的指針(所指向的內(nèi)存數(shù)據(jù)不能被修改,但是本?可以修改)
int * const d;
//第四個(gè) const修飾的是d,即d為常指針(指針變量不能被修改,但是它所指向內(nèi)存空間可以被修改)
const int * const e ;
//第五個(gè) 第一個(gè)const修飾的是*e,則*e的值,即所指向的內(nèi)存數(shù)據(jù)不能修改,第二個(gè)const修飾的e,即e的指向不能修改,所以e是 ?個(gè)指向常整形的常指針(指針和它所指向的內(nèi)存空間,均不能被修改)
不知道以上的基礎(chǔ)用法,你明白了嗎?(ps:不明白的話(huà),再看三遍)下面就來(lái)看看C語(yǔ)言中的const吧。
  1. C語(yǔ)言中的冒牌const
什么?你說(shuō)你不相信,const還有冒牌,不相信就來(lái)看看下邊的代碼吧
#include <stdio.h>
int main()
{
const int a = 10;
int *p = &a;
printf("a===>%d\n", a);
*p = 11;
printf("a===>%d\n", a);
return 0;
}
以上代碼在C語(yǔ)言編譯器中的運(yùn)行結(jié)果為:
怎么樣,用const定義的a;就這樣被改變了,這足以說(shuō)明C語(yǔ)言中的const是”冒牌貨”了吧!
再看看同樣的代碼在C++編譯器中運(yùn)行的結(jié)果:
直接報(bào)錯(cuò)了有沒(méi)有,這才是真正的const吧。什么,你說(shuō)來(lái)個(gè)強(qiáng)轉(zhuǎn),將const int* 強(qiáng)轉(zhuǎn)為const 就可以了,那咱們看代碼吧!
強(qiáng)轉(zhuǎn)之后是不報(bào)錯(cuò)了,但是你看,a的值被改變了嗎?沒(méi)有吧,還不信你就自己寫(xiě)個(gè)代碼,運(yùn)行下試試吧!
  1. Const和#define的區(qū)別
#include <iostream>
void fun1()
{
#define a 10
const int b = 20;
}
void fun2()
{
printf("a = %d\n", a);
//printf("b = %d\n", b);
}
int main()
{
fun2();
return 0;
}
通過(guò)這段代碼你發(fā)現(xiàn)什么了嗎?
在fun1函數(shù)中通過(guò)#define定義的a在fun2函數(shù)中可以使用,而通過(guò)const定義的b則不能在fun2中使用,這是為什么呢?你明白嗎?
這是因?yàn)?define 宏定義發(fā)生在預(yù)處理階段,只是簡(jiǎn)單的類(lèi)型轉(zhuǎn)換,不做語(yǔ)法檢查和變量作用域檢查,而const常量則發(fā)生在編譯階段,會(huì)進(jìn)行語(yǔ)法檢查和變量作用域檢查,而變量b在fun1中定義,只在fun1中可用,在fun2函數(shù)中不能使用。
  1. Const的好處
合理的利用const修飾變量的好處:
1)指針做函數(shù)參數(shù)時(shí),用const修飾表明是只讀,即不可修改參數(shù)的值,可以有效的提高代碼可讀性,減少bug;
2)可以清楚的分清參數(shù)的輸入和輸出特性
今天的講解就到這里了,如果想了解更多的知識(shí),請(qǐng)持續(xù)關(guān)注我們的論壇。

本文版權(quán)歸傳智播客C++培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客C/C++培訓(xùn)學(xué)院
首發(fā):http://www.xamj520.com/c/ 
0 分享到:
和我們?cè)诰€交談!