指針,其實很危險
比如下面一段代碼,我們分別定義了3個不同類型的指針,指向相同的地址,然后賦予不同的值。這樣一下我們就明了了。
本文引用地址:http://www.ex-cimer.com/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ù)大小不同。而且需要注意的是,對指針的賦值操作。C語言使用指針的限制是,所有對于指針的操作必須是同類型的指針才可以進行。像0x1000這樣只是一個數(shù)字而已,前面加上類型我們才能知道我們操作的地址指向的內容是多少字節(jié)。這樣就可以把指針和地址區(qū)分開。而另外需要注意的是C語言為了提升效率對于指針作出了起始地址對齊的要求,比如short指針地址需要被2整除,而long指針地址則需要被4整除。指針的存在讓我們對內存的操作有了自由性,但自由的同時也增加了危險性。比如如果我們定義指針類型時類型不同,那么在自增或者自減時指針地址的偏移就會不同。比如char型的指針,執(zhí)行自增后指針地址加1,而short型和long型則分別是加2和加4.如果我們編寫程序中沒有考慮到這點,那么很容易導致錯誤。而且相互連續(xù)定義的數(shù)組地址不一定連續(xù)。這些都是不小心就會犯錯的地方。
參考《刪繁就簡——單片機入門到精通》
評論