新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機C語言指針的指針

        單片機C語言指針的指針

        作者: 時間:2013-02-27 來源:網絡 收藏

        一個變量內部可以存儲一個值,這個值是另外一個對象的地址,所以我們說一個指針變量可以指向一個普通變量,同樣這個指針變量也有一個地址,也就是 說有一個東西可以指向這個指針變量,然后再通過這個指針變量指向這個對象。那么如何來指向這個指針變量呢?由于指針變量本身已經是一個指針了(右值),那 么我們這里就不能用一般的指針了,需要在指針上體現出來這些特點,我們需要定義指針的指針(二重指針)。

        int *p1=i;

        int**p2=p1;

        綜合以上的所有點,下面是我們常??吹揭恍┢ヅ?也是經常出錯的地方):

        int a[3],b[2][3],c,*d[3];
        void fun1(int *p);
        void fun2(int (*p)[3]);
        void fun3(int **p);
        void fun4(int p[3]);
        void fun5(int p[]);
        void fun6(int p[2][3]);
        void fun7(int (p)[3]);

        函數 不會產生編譯時刻的可能值(但邏輯上不一定都對)--這里我覺得應該是有效的值

        單片機C語言指針的指針

        為什么可以有這樣的搭配,原因如下:

        對于fun1 fun4 fun 5: 在編譯器看來fun1,fun4,fun5的聲明是一樣,在編譯時候,編譯器把數組的大小舍去不考慮,只考慮它是一個指針,也就是說有沒有大小說明是一樣的,所以三者的形式都是fun1的形式(其實只要提供了int*指針就可以了);

        對于fun7 :以上的解釋對于引用是不適用的,如果變量被聲明為數組的引用,那么編譯器就要考慮數組的大小了,那么必須和聲明一模一樣(所以fun7就只有a合適);

        對于fun2:p是一個指向一個含有3個元素的數組,這樣b和b+i正好合適,而a卻不是(它是指向a[0]的,不是指向這個數組的);

        對于fun3:p是一個指針的指針,而d指向d[0],同時d[0]又是一個指針,所以d就是一個指針的指針。但是b卻不是(它是一個2*3的矩陣也就是年int [2][3]類型);

        對于fun6,p是一個2*3的數組類型,和b恰好完全匹配

        c語言相關文章:c語言教程


        單片機相關文章:單片機教程


        單片機相關文章:單片機視頻教程


        單片機相關文章:單片機工作原理




        關鍵詞: 單片機 C語言 指針

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 平江县| 青河县| 株洲县| 长汀县| 柘荣县| 栖霞市| 互助| 山西省| 仙桃市| 石城县| 罗山县| 虎林市| 巫溪县| 岢岚县| 旌德县| 望谟县| 九龙县| 祁连县| 乌审旗| 黑山县| 韶关市| 会东县| 汕尾市| 德庆县| 浦东新区| 谷城县| 河北区| 东乌| 天等县| 从化市| 克山县| 静宁县| 黄梅县| 敖汉旗| 都江堰市| 阿荣旗| 六安市| 汽车| 乐安县| 康马县| 江阴市|