新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 指針,其實(shí)很危險(xiǎn)

指針,其實(shí)很危險(xiǎn)

作者: 時(shí)間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
我們知道,指針是指向一個(gè)地址的。而指針的類型則表明了指針指向內(nèi)容的大小,即包含字節(jié)數(shù),這在對(duì)于指針的自增和自減中體現(xiàn)的很明確。

比如下面一段代碼,我們分別定義了3個(gè)不同類型的指針,指向相同的地址,然后賦予不同的值。這樣一下我們就明了了。

本文引用地址:http://m.butianyuan.cn/article/201611/319102.htm

  1. //解釋代碼
  2. char*p_char;
  3. short*p_short;
  4. long*p_long;
  5. p_char=(char*)0x1000;
  6. p_short=(short*)0x1000;
  7. p_long=(long*)0x1000;
  8. *p_char=0x12;
  9. *p_short=0x1234;
  10. *p_long=0x12345678;

從以上的代碼我們即可看出,不同類型的指針,所能表示的數(shù)據(jù)大小不同。而且需要注意的是,對(duì)指針的賦值操作。C語言使用指針的限制是,所有對(duì)于指針的操作必須是同類型的指針才可以進(jìn)行。像0x1000這樣只是一個(gè)數(shù)字而已,前面加上類型我們才能知道我們操作的向的內(nèi)容是多少字節(jié)。這樣就可以把指針和地址區(qū)分開。而另外需要注意的是C語言為了提升效率對(duì)于指針作出了起始地址對(duì)齊的要求,比如short指針地址需要被2整除,而long指針地址則需要被4整除。指針的存在讓我們對(duì)內(nèi)存的操作有了自由性,但自由的同時(shí)也增加了危險(xiǎn)性。比如如果我們定義指針類型時(shí)類型不同,那么在自增或者自減時(shí)指針地址的偏移就會(huì)不同。比如char型的指針,執(zhí)行自增后指針地址加1,而short型和long型則分別是加2和加4.如果我們編寫程序中沒有考慮到這點(diǎn),那么很容易導(dǎo)致錯(cuò)誤。而且相互連續(xù)定義的數(shù)組地址不一定連續(xù)。這些都是不小心就會(huì)犯錯(cuò)的地方。


參考《刪繁就簡(jiǎn)——單片機(jī)入門到精通》



關(guān)鍵詞: 地址指

評(píng)論


技術(shù)專區(qū)

關(guān)閉