C++ pointer


記得大一剛接觸C的時候,指針是最頭疼的,最近C++中又碰到它了,有一些零碎的東西需要整理一下。

學了兩年計算機,說說自己對指針很淺顯的認識,指針這個概念繼承自匯編,可以直接操縱內存,很靈活,靈活性大了,不穩定因素自然就產生了(代碼段、數據段安全性問題),中級語言C、C++都兼容指針,因此他們很適合有高性能需求的開發,高級語言Java、C#等完全面向對象語言中回避了指針的概念,比如C#中的委托是對方法的封裝,其實不就是函數指針集嘛。:)

 

const對象、指向const對象的指針、const指針(通過一個面試題來了解)

 

1.const對象

  (1)關於const,很多企業的筆試、面試都會出現,很簡單,就問你“const的含義?”。

我不清楚大家的回答,我的第一反應是常量,然后我想到了C#中關於const的解釋(static and read-Only),於是我想到了只讀,我只想到這么多。

看一下答案吧:

答:我只要一聽到被面試者說:“const意味着常數”,我就知道我正在和一個業余者打交道。去年Dan Saks已經在他的文章里完全概括了const的所有用法,因此ESP(譯者:Embedded Systems Programming)的每一位讀者應該非常熟悉const能做什么和不能做什么.如果你從沒有讀到那篇文章,只要能說出const意味着“只讀”就可以了。盡管這個答案不是完全的答案,但我接受它作為一個正確的答案。(如果你想知道更詳細的答案,仔細讀一下Saks的文章吧。)

:)自己勉勉強強過關,下面有網友提供了更豐富一點的答案:

1). 關鍵字const的作用是為給讀你代碼的人傳達非常有用的信息,實際上,聲明一個參數為常量是為了告訴了用戶這個參數的應用目的。如果你曾花很多時間清理其它人留下的垃圾,你就會很快學會感謝這點多余的信息。(當然,懂得用const的程序員很少會留下的垃圾讓別人來清理的。)
2). 通過給優化器一些附加的信息,使用關鍵字const也許能產生更緊湊的代碼。
3). 合理地使用關鍵字const可以使編譯器很自然地保護那些不希望被改變的參數,防止其被無意的代碼修改。簡而言之,這樣可以減少bug的出現

這個說明const在提高代碼“可讀性”,“健壯性”還是很有效的。

 

2. 指向const對象的指針

(1)

//指向const對象的指針
const int i = 1024;//注意初始化
const int *ip = &i;

(2)將const對象的地址給普通指針會編譯出錯

const double d = 3.14;
double *dp = &d;//error:因為dp會默認它所指向的對象是可修改的,如果正確的話,意味着可以通過*dp來修改d的值,這樣顯然不可以。

(3)相反允許將非const對象的地址給”指向const對象的指針“

double d = 3.14;
const double *dp = &d;//ok:同理,dp默認d是const對象,所以不可以通過*dp來修改d的值

 

3.const指針(注意:定義時必須初始化)

(1)

int i = 0;
int *const ip = &i;

(2)* 指向const對象的const指針

const double d = 3.14;
const double *const dp = &d;

 

4.Tips

(1)我們在閱讀這類表達式時最好是“從右到左”的順序,會便於理解

(2)在表達式中我們可將*理解為“point to”,如

const double d = 3.14;
const double *const dp = &d;//dp is const point to double value which is const

 

5.附送一道小題目,很簡單,別看花了眼哈

const int a;
int const a;
const int *a;
int *const a;
int const *a const;

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM