指針,其實(shí)很危險(xiǎn)
比如下面一段代碼,我們分別定義了3個(gè)不同類型的指針,指向相同的地址,然后賦予不同的值。這樣一下我們就明了了。
本文引用地址:http://m.butianyuan.cn/article/201611/319102.htm- //解釋代碼
- char*p_char;
- short*p_short;
- long*p_long;
- p_char=(char*)0x1000;
- p_short=(short*)0x1000;
- p_long=(long*)0x1000;
- *p_char=0x12;
- *p_short=0x1234;
- *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ī)入門到精通》
評(píng)論