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

首頁 > 學院 > 開發設計 > 正文

c/c++中結構體的入門教程

2019-11-17 05:06:46
字體:
來源:轉載
供稿:網友
什么是結構體?

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


定義結構體使用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();
}


總之,結構體可以描述數組不能夠清楚描述的結構,它具有數組所不具備的一些功能特性。 更多文章 更多內容請看asp.net教程  C/C++技術學堂  C/C++技術專題專題,或 下面我們來看一下,結構體變量是如何作為函數參數進行傳遞的。



//程序作者:管寧
//站點: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();
}
更多文章 更多內容請看ASP.NET教程  C/C++技術學堂  C/C++技術專題專題,或 上面我們說明了易用引用對結構體進行操作的優勢,下面我們重點對比兩個例程,進一部分析關于效率的問題。




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


//-------------------------------------例程1---------------------------------

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

test get_score()
{
test pn;
cin>>pn.name>>pn.socre;
return pn;
}
void main()
{
test a[2];
int num = sizeof(a)/sizeof(test);
for(int i=0;i<num;i++)
{
a[i]=get_score();
}
cin.get();
for(int i=0;i<num;i++)
{
print_score(a[i]);
}
cin.get();
}

//-------------------------------------例程2---------------------------------




#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 get_score(test &pn)
{
cin>>pn.name>>pn.socre;
}
void main()
{
test a[2];
int num = sizeof(a)/sizeof(test);
for(int i=0;i<num;i++)
{
get_score(a[i]);
}
cin.get();
for(int i=0;i<num;i++)
{
print_score(a[i]);
}
cin.get();
}


例程2的效率要遠高過例程1的原因主要有以下兩處:


第一:

例程1中的

test get_score()
{
test pn;
cin>>pn.name>>pn.socre;
return pn;
}

調用的時候在內部要在??臻g開辟一個名為pn的結構體變量,程序pn的時候又再次在棧內存空間內自動生成了一個臨時結構體變量temp,在前面的教程中我們已經說過,它是一個copy,而例程2中的:

void get_score(test &pn)
{
cin>>pn.name>>pn.socre;
}

卻沒有這一過程,不開辟任何新的內存空間,也沒有任何臨時變量的生成。 更多文章 更多內容請看ASP.NET教程  C/C++技術學堂  C/C++技術專題專題,或

第二:

例程1在mian()中,必須對返回的結構體變量進行一次結構體變量與結構體變量直接的相互賦值操作。

for(int i=0;i<num;i++)
{
a[i]=get_score();
}

而例程2中由于是通過內存地址直接操作,所以完全沒有這一過程,提高了效率。

for(int i=0;i<num;i++)
{
get_score(a[i]);
}  函數也是可以返回結構體應用的,例子如下:


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

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

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

test a;


test &get_score(test &pn)
{
cin>>pn.name>>pn.socre;
return pn;
}

void print_score(test &pn)
{
cout<<pn.name<<""<<pn.socre<<endl;
}

void main()
{
test &sp=get_score(a);
cin.get();
cout<<sp.name<<""<<sp.socre;
cin.get();
}


調用get_score(a);結束并返回的時候,函數內部沒有臨時變量的產生,返回直接吧全局結構變量a的內存地址賦予結構引用sp

最后提一下指針的引用

定義指針的引用方法如下
void main()
{
int a=0;
int b=10;
int *p1=&a;
int *p2=&b;
int *&pn=p1;
cout <<pn<<""<<*pn<<endl;
pn=p2;
cout <<pn<<""<<*pn<<endl;
cin.get();
}

pn就是一個指向指針的引用,它也可以看做是指針別名,總之使用引用要非凡注重它的特性,它的操作是和普通指針一樣的,在函數中對全局指針的引用操作要十分小心,避免破壞全局指針! 更多文章 更多內容請看ASP.NET教程 
 C/C++技術學堂  C/C++技術專題專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情按摩在线| 欧美日韩一区二区三区| 国产精品视频成人| 久久久久久久999| 国产精品自产拍在线观看中文| 国产精品久久久久久久7电影| 精品国产乱码久久久久久虫虫漫画| 国产aⅴ夜夜欢一区二区三区| 精品久久久久久中文字幕大豆网| 国产在线拍偷自揄拍精品| 播播国产欧美激情| 亚洲国产女人aaa毛片在线| 免费91在线视频| 久久久久久久久久久成人| 亚洲成人精品视频| 欧美激情第三页| 欧美激情亚洲视频| 亚洲毛片在线看| 日韩精品中文在线观看| 日韩视频在线观看免费| 成人xvideos免费视频| 午夜免费在线观看精品视频| 一区二区三区四区在线观看视频| 欧美一级黄色网| 国产suv精品一区二区三区88区| 成人黄色片网站| 日韩一区二区三区国产| 亚洲区免费影片| 欧美精品在线第一页| 亚洲图片欧美日产| 性色av一区二区三区在线观看| 精品人伦一区二区三区蜜桃免费| www.美女亚洲精品| 国产精品久久久久久久久| 国产成人中文字幕| 欧美一级在线亚洲天堂| 亚洲国产精品yw在线观看| 精品在线观看国产| 4438全国亚洲精品在线观看视频| 欧美在线播放视频| 日韩av电影在线网| 成人免费在线视频网站| 亚洲一区二区三区乱码aⅴ蜜桃女| 91精品久久久久久久久中文字幕| 国产一区二区日韩精品欧美精品| 国产日韩欧美在线播放| 亚洲日本成人网| 国产精品视频久久久久| 日韩专区在线观看| 欧美激情a∨在线视频播放| 久久久久一本一区二区青青蜜月| 欧美成人精品在线观看| 国产精品成人免费电影| 国产精品嫩草影院一区二区| 国产亚洲精品一区二555| 欧美精品国产精品日韩精品| 伊人久久五月天| 国产成人小视频在线观看| 亚洲成人激情在线| 一区二区在线视频| 国产精品情侣自拍| 国产91|九色| 日韩欧美一区二区三区| 欧美极品在线播放| 久久激情五月丁香伊人| 国产精品中文字幕在线| 久久影院在线观看| 亚洲老头老太hd| 91色视频在线导航| 久久久国产精品亚洲一区| 91高潮精品免费porn| 国产ts人妖一区二区三区| 国产精品久久久久久亚洲调教| 亚洲精品少妇网址| 国产日韩在线亚洲字幕中文| 亚洲午夜精品视频| 午夜精品蜜臀一区二区三区免费| 亚洲精品在线观看www| 中文字幕日韩精品在线| 日韩av在线免费观看| 日韩一区二区福利| 九九精品在线观看| 国产精品久久91| 国产亚洲综合久久| 久久久久女教师免费一区| 亚洲成av人影院在线观看| 伊人男人综合视频网| 久久久精品美女| 98精品国产高清在线xxxx天堂| 亚洲国产精品久久精品怡红院| 91视频国产一区| 亚洲色图五月天| 国产精品视频一区国模私拍| 成人网址在线观看| 精品无码久久久久久国产| 亚洲综合在线做性| 久久人人爽人人爽爽久久| 欧美日韩福利视频| 久久精品在线播放| 国产一区二区成人| 亚洲成人黄色网| 国产亚洲一区二区精品| 蜜臀久久99精品久久久久久宅男| 亚洲a区在线视频| 一区二区三区高清国产| 超碰精品一区二区三区乱码| 国产精品夫妻激情| 最近中文字幕mv在线一区二区三区四区| 亚洲大尺度美女在线| 成人h视频在线观看播放| 国产亚洲激情在线| 久久久久亚洲精品成人网小说| 国产精品成人v| 亚洲欧美日韩国产中文专区| 一本色道久久综合狠狠躁篇怎么玩| 91免费看片网站| 欧美在线观看一区二区三区| 亚洲欧美在线第一页| 国产精品观看在线亚洲人成网| 亚洲二区中文字幕| 欧美午夜精品在线| 亚洲欧美另类人妖| 欧美电影免费播放| 精品激情国产视频| 97在线视频一区| 国产激情综合五月久久| 欧美激情视频给我| 久久精品视频99| 亚洲高清在线观看| 欧美激情视频免费观看| 91丨九色丨国产在线| 中文字幕最新精品| 欧美一级免费视频| 欧美极品在线播放| 欧美精品免费播放| 亚州精品天堂中文字幕| 亚洲国产第一页| 色偷偷av一区二区三区| 国产成人97精品免费看片| 国产国产精品人在线视| 欧美一级淫片aaaaaaa视频| 精品久久在线播放| 久久在线视频在线| 97人人模人人爽人人喊中文字| 97久久国产精品| 久久精品成人动漫| 狠狠躁夜夜躁人人爽超碰91| 色妞色视频一区二区三区四区| 国产69精品久久久| 国产成人亚洲综合91| 久久久国产影院| 久久久国产在线视频| 精品成人乱色一区二区| 国产日韩欧美综合| 欧美日韩一区二区精品| 欧美亚洲午夜视频在线观看| 欧美亚洲另类视频| 欧美一级高清免费播放| 九九热最新视频//这里只有精品| 亚洲男人天堂2023| 97avcom| 国产日韩欧美在线| 国产在线精品成人一区二区三区| 亚洲黄一区二区|