• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • c/c++中結構體的入門教程

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    什么是結構體? 簡單的來說,結構體就是一個可以包含不同數據類型的一個結構,它是一種可以自己定義的數據類型,它的特點和數組主要有兩點不同,首先結構體可以在一個結構中聲明不同的數據類型,第二相同結構的結構體變量是可以相互賦值的,而數組是做不到的
    什么是結構體?

    簡單的來說,結構體就是一個可以包含不同數據類型的一個結構,它是一種可以自己定義的數據類型,它的特點和數組主要有兩點不同,首先結構體可以在一個結構中聲明不同的數據類型,第二相同結構的結構體變量是可以相互賦值的,而數組是做不到的,因為數組是單一數據類型的數據集合,它本身不是數據類型(而結構體是),數組名稱是常量指針,所以不可以做為左值進行運算,所以數組之間就不能通過數組名稱相互復制了,即使數據類型和數組大小完全相同。


    定義結構體使用struct修飾符,例如:

    struct test
    {
    float a;
    int b;
    };

    上面的代碼就定義了一個名為test的結構體,它的數據類型就是test,它包含兩個成員a和b,成員a的數據類型為浮點型,成員b的數據類型為整型。

    由于結構體本身就是自定義的數據類型,定義結構體變量的方法和定義普通變量的方法一樣。

    test pn1;

    這樣就定義了一test結構體數據類型的結構體變量pn1,結構體成員的訪問通過點操作符進行,

    pn1.a=10 就對結構體變量pn1的成員a進行了賦值操作,

    注意:結構體生命的時候本身不占用任何內存空間,只有當你用你定義的結構體類型定義結構體變量的時候計算機才會分配內存。

    結構體,同樣是可以定義指針的,那么結構體指針就叫做結構指針。

    結構指針通過->符號來訪問成員,下面我們就以上所說的看一個完整的例子:


    //程序作者:管寧
    //站點:www.cndev-lab.com
    //所有稿件均有版權,如要轉載,請務必著名出處和作者

    #include <iostream>
    #include <string>
    using namespace std;

    struct test//定義一個名為test的結構體
    {
    int a;//定義結構體成員a
    int b;//定義結構體成員b
    };

    void main()
    {
    test pn1;//定義結構體變量pn1
    test pn2;//定義結構體變量pn2

    pn2.a=10;//通過成員操作符.給結構體變量pn2中的成員a賦值
    pn2.b=3;//通過成員操作符.給結構體變量pn2中的成員b賦值

    pn1=pn2;//把pn2中所有的成員值復制給具有相同結構的結構體變量pn1
    cout<<pn1.a<<"|"<<pn1.b<<endl;
    cout<<pn2.a<<"|"<<pn2.b<<endl;

    test *point;//定義結構指針

    point=&pn2;//指針指向結構體變量pn2的內存地址
    cout<<pn2.a<<"|"<<pn2.b<<endl;
    point->a=99;//通過結構指針修改結構體變量pn2成員a的值
    cout<<pn2.a<<"|"<<pn2.b<<endl;
    cout<<point->a<<"|"<<point->b<<endl;
    cin.get();
    }



    總之,結構體可以描述數組不能夠清晰描述的結構,它具有數組所不具備的一些功能特性。

    下面我們來看一下,結構體變量是如何作為函數參數進行傳遞的。



    //程序作者:管寧
    //站點:www.cndev-lab.com
    //所有稿件均有版權,如要轉載,請務必著名出處和作者

    #include <iostream>
    #include <string>
    using namespace std;

    struct test
    {
    char name[10];
    float socre;
    };

    void print_score(test pn)//以結構變量進行傳遞
    {
    cout<<pn.name<<"|"<<pn.socre<<endl;
    }

    void print_score(test *pn)//一結構指針作為形參
    {
    cout<<pn->name<<"|"<<pn->socre<<endl;
    }

    void main()
    {
    test a[2]={{"marry",88.5},{"jarck",98.5}};
    int num = sizeof(a)/sizeof(test);
    for(int i=0;i<num;i++)
    {
    print_score(a[i]);
    }
    for(int i=0;i<num;i++)
    {
    print_score(&a[i]);
    }
    cin.get();
    }



    void print_score(test *pn)的效率是要高過void print_score(test pn)的,因為直接內存操作避免了??臻g開辟結構變量空間需求,節省內存。

     

    下面我們再說一下,傳遞結構引用的例子。

    利用引用傳遞的好處很多,它的效率和指針相差無幾,但引用的操作方式和值傳遞幾乎一樣,種種優勢都說明善用引用可以做到程序的易讀和易操作,它的優勢尤其在結構和大的時候,避免傳遞結構變量很大的值,節省內存,提高效率。



    //程序作者:管寧
    //站點:www.cndev-lab.com
    //所有稿件均有版權,如要轉載,請務必著名出處和作者

    #include <iostream>
    #include <string>
    using namespace std;

    struct test
    {
    char name[10];
    float socre;
    };

    void print_score(test &pn)//以結構變量進行傳遞
    {
    cout<<pn.name<<"|"<<pn.socre<<endl;
    }

    void main()
    {
    test a[2]={{"marry",88.5},{"jarck",98.5}};
    int num = sizeof(a)/sizeof(test);
    for(int i=0;i<num;i++)
    {
    print_score(a[i]);
    }
    cin.get();
    }

    本新聞共2頁,當前在第1頁  1  2  

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>