新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 指針,其實很危險

        指針,其實很危險

        作者: 時間:2016-11-21 來源:網絡 收藏
        我們知道,指針是指向一個地址的。而指針的類型則表明了指針指向內容的大小,即包含字節數,這在對于指針的自增和自減中體現的很明確。

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

        本文引用地址:http://www.104case.com/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;

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


        參考《刪繁就簡——單片機入門到精通》



        關鍵詞: 地址指

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 施秉县| 拜泉县| 拉孜县| 同仁县| 腾冲县| 夹江县| 莱阳市| 灵丘县| 饶平县| 乐至县| 渝中区| 澎湖县| 克拉玛依市| 杂多县| 澄江县| 东阿县| 栖霞市| 丽水市| 桦南县| 葵青区| 汝州市| 奉新县| 祁连县| 梧州市| 敦化市| 嘉黎县| 满洲里市| 五家渠市| 来凤县| 轮台县| 长丰县| 册亨县| 图片| 遂昌县| 文化| 澜沧| 水富县| 罗甸县| 杂多县| 仁怀市| 巴塘县|