亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

詳解C++程序中定義struct結構體的方法

2020-01-26 14:35:35
字體:
來源:轉載
供稿:網友

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

結構體的定義

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

struct test  {    float a;    int b;  };  

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

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

test pn1;

這樣就定義了一test結構體數據類型的結構體變量pn1,結構體成員的訪問通過點操作符進行,pn1.a=10 就對結構體變量pn1的成員a進行了賦值操作。
注意:結構體生命的時候本身不占用任何內存空間,只有當你用你定義的結構體類型定義結構體變量的時候計算機才會分配內存。
結構體,同樣是可以定義指針的,那么結構體指針就叫做結構指針。
結構指針通過->符號來訪問成員,下面我們就以上所說的看一個完整的例子:

#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();  } 

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

再看一下下面這段結構體的定義:

struct point {  int x;  int y;};

這段代碼在C++里面其實簡單,point是一個類(class), 且由于用了struct關鍵字,那么x,y都是public的。然而在C里面,事情沒這么簡單。在C里面point只是一個tag, struct point才是一個完整的類型名稱, 所以在C里面,用聲明一個poin變量,需要這么寫:struct point pt; 而在C++可以直接寫:point pt;

在C里面想直接用類似C++的方法定義變量,需要用typedef, 比如

typedef struct point {  int x;  int y;} Point;

那么就可以直接寫Point pt; 了。之所以想寫這個總結是因為自己在用struct的時候總是用的不倫不類,比如下面的用法就是不好的我覺得:

struct Point {  int x;  int y;};Point pt;

這段代碼是定義pt是C++的用法, 涉及到類,但是定義這個類又只有兩個public的成員變量,像極了純C的struct結構體。這就有點不倫不類了,如果要從面向對象的角度,最好就還是把Point定義成class, 然后加上getX, setX, getY, setY去access還有modify成員變量,還要加一個constructor和destructor:

class Point {public:  Point(int vx, int vy): x(vx), y(vy) {}  ~Point() {}  int getX() const { return x; } //const means 'this' is constant  int getY() const { return y; }  void setX(int value) { x = value; }  void setY(int value) { y = value; }private:  int x;  int y;};Point pt;

上面的代碼的風格是很好的,而且也不會不倫不類,但是就是稍微有點小題大做或者殺雞用牛刀的感覺,為什么這么說呢,比如有時候我們其實很想方便的修改x, y,覺得直接賦值更加自然,何必調用一個函數呢,這個感覺來自于面向過程的C,如果這樣, 我覺得下面這個代碼也是可以接受的比較自然的一種代碼(還是面向對象的思維,但是僅僅省略getter和setter而直接access成員變量):

struct Point {  int x;  int y;  Point(int vx, int vy): x(vx), y(vy) {}};

總結:

C和C++里面的struct還是需要好好理解,一個是面向過程,一個是面向對象,使用的時候千萬不要不倫不類。我覺得C++的面向對象的用法比較合理,C面向過程的用法還是太繁瑣不夠靈活,建議使用倒數第一和倒是第二種struct代碼風格。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人网址在线观看| 亚洲无限乱码一二三四麻| 国产精品成人aaaaa网站| 91久久久久久久久| 国产精欧美一区二区三区| 日本精品一区二区三区在线| 97超级碰碰人国产在线观看| 亚洲人成网7777777国产| 中文字幕av一区| 久久久之久亚州精品露出| 欧美壮男野外gaytube| 色系列之999| 亚洲在线观看视频网站| 久久成人综合视频| 国产精彩精品视频| 97香蕉久久夜色精品国产| 国产精品丝袜久久久久久不卡| 中文字幕欧美精品在线| 亚洲精品黄网在线观看| 日韩av123| 91成品人片a无限观看| 亚洲欧洲在线视频| 亚洲国产欧美一区二区丝袜黑人| 亚洲欧洲免费视频| 欧美另类在线播放| 国产色视频一区| 91九色精品视频| 97色在线视频观看| 伊人久久精品视频| 久久久伊人欧美| 亚洲精品aⅴ中文字幕乱码| 91精品国产高清久久久久久| 欧美在线亚洲一区| 亚洲免费高清视频| 韩剧1988免费观看全集| 亚洲精品一二区| 国产精品热视频| 久久久久久12| 性日韩欧美在线视频| 日韩中文字幕久久| 欧美大片在线免费观看| 亚洲网在线观看| 午夜精品三级视频福利| 欧美极品欧美精品欧美视频| 亚洲欧美中文字幕在线一区| 久久久精品影院| 国产精品草莓在线免费观看| 乱亲女秽乱长久久久| 日韩一区在线视频| 亚洲精品xxx| 欧美久久久精品| 精品动漫一区二区| 色天天综合狠狠色| 亚洲精品v天堂中文字幕| 久久久97精品| 一本一本久久a久久精品牛牛影视| 日韩不卡在线观看| 久久久久久久久久久网站| 成人福利网站在线观看11| 亚洲国产天堂久久综合| 精品成人国产在线观看男人呻吟| 亚洲自拍另类欧美丝袜| 亚洲国产精品福利| 亚洲欧美日韩中文在线制服| 日韩视频免费观看| 欧美夜福利tv在线| 日韩成人激情影院| 日韩欧美国产激情| 亚洲欧美日韩国产精品| 欧美大全免费观看电视剧大泉洋| 日本三级韩国三级久久| 欧美精品videofree1080p| 国产欧亚日韩视频| 欧美一级在线亚洲天堂| 国产精品久久久久久久久久久新郎| 欧美激情久久久久久| 久久国产精品电影| 欧美亚洲在线观看| 日本精品视频在线观看| y97精品国产97久久久久久| 欧美色道久久88综合亚洲精品| 欧美色视频日本版| 日韩中文av在线| 日韩亚洲成人av在线| 国产中文欧美精品| 91精品国产乱码久久久久久久久| 日韩在线视频播放| 亚洲第一国产精品| 日韩精品在线免费观看视频| 成人黄色影片在线| 亚洲国产成人91精品| 国产日韩欧美夫妻视频在线观看| 一本色道久久综合狠狠躁篇怎么玩| 免费97视频在线精品国自产拍| 亚洲国产精彩中文乱码av在线播放| 69视频在线免费观看| 国产成人一区二区| 国产精品久久久久久搜索| 国产精品久久久久久av下载红粉| 欧美一级大片在线观看| 欧美日本高清视频| 欧美极品少妇xxxxⅹ裸体艺术| 性金发美女69hd大尺寸| 日产精品久久久一区二区福利| 亚洲成人免费网站| 国产精品白丝av嫩草影院| 欧洲成人在线视频| 中文字幕日韩高清| 粉嫩老牛aⅴ一区二区三区| 国产精品成人av在线| 欧美一区二区影院| 狠狠做深爱婷婷久久综合一区| 日韩av电影在线网| 国产精品成人久久久久| 日韩中文字幕在线看| 蜜月aⅴ免费一区二区三区| 91国产精品电影| 国产精品亚洲视频在线观看| 久久精品美女视频网站| 国产日韩在线看| 国产成人一区二区在线| 97国产精品免费视频| 91探花福利精品国产自产在线| 欧美风情在线观看| 最近2019年日本中文免费字幕| 最新国产成人av网站网址麻豆| 国产精品日韩一区| 久久久久久伊人| 成人av资源在线播放| 92版电视剧仙鹤神针在线观看| 国产精品男女猛烈高潮激情| 久久精品国产一区| 久久久久久香蕉网| 一本一本久久a久久精品综合小说| 欧美疯狂xxxx大交乱88av| 日韩国产欧美精品一区二区三区| 国产91在线播放精品91| 92看片淫黄大片看国产片| 国产一区二区丝袜| 在线性视频日韩欧美| 亚洲网站视频福利| 国产精品综合网站| 欧美视频裸体精品| 亚洲激情久久久| 国产精品视频一区二区三区四| 久久久午夜视频| 国产一区二区三区在线| 国产精品高清在线观看| 日本中文字幕久久看| 亚洲综合在线播放| 国内精品一区二区三区四区| 成人免费在线网址| 在线观看视频亚洲| 国产69久久精品成人看| 亚洲欧洲日产国产网站| 欧美极品在线视频| 欧美激情免费在线| 国产精品视频内| 日本成人激情视频| 国产精品久久不能| 久久久成人av| 97久久久久久| 成人网中文字幕| 日韩av影视在线|