<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        C語言:結構體與結構體指針

        作者:xuchen   來源:xuchen的blog   點擊數:  更新時間:2014年05月28日   【字體:

        1、指向結構體的指針變量:

        C 語言中->是一個整體,它是用于指向結構體,假設我們在程序中定義了一個結構體,然后聲明一個指針變量指向這個結構體,那么我們要用指針取出結構體中的數據,就要用到指向運算符“->”.
         
         
        舉例說明:
         
         
        struct SunLL
        {
          int a;
         
         
          int b;
         
         
          int c;
        };         
         
        struct SunLL  * p;               //定義結構體指針
        struct SunLL A = {1,2,3};    //定義一個SunLL類型的變量A
         
         
        int x;                                //定義一個變量x
        p = &A ;                          //讓p指向A
        x = p->a;                       //等價于  x=(*p).a         (*p)表示p指向的結構體變量
         
         
                                              //這句話的意思就是取出p所指向的結構體中包含的數據項a賦值給x
         
                                             //由于此時p指向A,因而 p->a == A.a,也就是1
         
         
        2、指向結構體數組的指針變量:
         
         
        指向結構體的指針變量也可以指向結構體數組及其元素。
         
         
        如果程序如下:
         
         
        struct SunLL *p,sun[3];
         
         
        p = sun;
         
         
        如果假定sun[0]的地址是1000,指針變量p指向結構體數組sun的首地址,由于size of(struct SunLL)的值是6,每個結構體元素占內存空間6個字節,因此p+1指向地址1006,p+2指向地址1012.
         
         
        使用指針變量指向結構體變量或結構體數組時,應注意運算符的優先級,在c語言中"()" "[ ]" "->" "."四個優先級相同,具有最高的優先級,其次是”*“ ”++“ ”--“ ”&“四個相同優先級的運算符。如:++P->a的表達式等價于++(p->a)
         
         
        (++p)->a先計算++p,p指向sun[1];
         
         
        P++->a;則表達式等價于(p++)->a;
         
         
        p->a++的表達式等價于(p->a)++;
         
         
        3、結構體作為函數參數與結構體指針作為函數參數
         
         
        舉例1
         
         
        struct st
         
         
        {
         
         
        int a;
         
         
        char b;
         
         
        };
         
         
        fun(struct st bc)
         
         
        {
         
         
        bc.a+=5;
         
         
        bc.b='A';
         
         
        printf("%d,%c\n",bc.a,bc.b);
         
         
        }
         
         
        main()
         
         
        {
         
         
        struct st bl;
         
         
        bl.a=3;
         
         
        bl.b="c";
         
         
        fun(bl);
         
         
        printf("%d,%c\n",bl.a,bl.b);
         
         
        }
         
         
        運行結果為:8,A        3,c
         
         
        舉例2:
         
         
        struct st
         
         
        {
         
         
        int a;
         
         
        char b;
         
         
        };
         
         
        fun(struct st *bp)
         
         
        {
         
         
        bp->a+=5;
         
         
        bp->b='A';
         
         
        printf("%d,%c\n",bc.a,bc.b);
         
         
        }
         
         
         
        main()
         
         
        {
         
         
        struct st bl;
         
         
        bl.a=3;
         
         
        bl.b="c";
         
         
        fun(&bl);
         
         
        printf("%d,%c\n",bl.a,bl.b);
         
         
        }
         
         
        運行結果為:8,A        8,A
         
         
        總結:
         
         
        將結構體變量作為函數參數,是將實參值傳遞給形參,屬于值傳遞。將結構體所有參數傳遞給形參使用,但本身的值不會改變。將指向結構體變量的指針作為實參進行傳遞時,是將結構體變量的地址傳遞給形參,屬于地址傳遞,會改變實際結構體變量的成員值的。
         
        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮