理解“指針就是地址”售碳,是學習指針的必要條件强重,但不是充分條件,這只是萬里長征第一步贸人。
困惑:
1.指向int的指針间景?指向char的指針?既然是地址艺智,有什么不同呢倘要?
2.給指針+1時,有時前進2個字節(jié)十拣,有時前進4個字節(jié)封拧?這是為什么?怎么做到的呢夭问?
3.scanf時泽西,%d必須在其輸出的變量前加&,對于%s缰趋,則不需要捧杉。
4.將指針和數(shù)組混為一談,犯下“將沒有分配內存區(qū)域的指針當做數(shù)組進行訪問”或者“將指針賦給數(shù)組”這樣的錯誤秘血!
導致這些悲劇的幕后黑手是:
1.C語言的奇怪語法
2.數(shù)組和指針之間微妙的兼容性
關于C語言中的聲明中的一些困惑:
1.[]比*的優(yōu)先級高展融,那么char *s[10]到底應該怎么樣理解呢韩脑?
2.double (*p)[3]和?void (*func)(int a)應該怎么理解呢陵珍?
3.int *a?和 int a[]在什么時候是可以互換的呢琼蚯?
4.空的[]可以在什么情況下使用蜕着?是什么意義谋竖?
注意以下兩個事實:
1.在引用數(shù)組中的元素時,其實a[i]中的[]和數(shù)組毫無關系承匣。
2.C里面不存在多維數(shù)組
指針有著底層而邪惡的一面蓖乘,但是,它又是構造鏈表和樹等“數(shù)據(jù)結構”不可缺少的概念韧骗。如果沒有指針嘉抒,我們是做不出那樣的應用程序的。凡是成熟的開發(fā)語言袍暴,必定存在指針些侍,如Lisp等等……