新聞中心
誰能給我講講c的結(jié)構(gòu)體啊
結(jié)構(gòu)體定義
創(chuàng)新互聯(lián)建站主營南明網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,App定制開發(fā),南明h5微信平臺小程序開發(fā)搭建,南明網(wǎng)站營銷推廣歡迎南明等地區(qū)企業(yè)咨詢
結(jié)構(gòu)體(struct)是由一系列具有相同類型或不同類型的數(shù)據(jù)構(gòu)成的數(shù)據(jù)集合,也叫結(jié)構(gòu)。
結(jié)構(gòu)體作用
結(jié)構(gòu)體和其他類型基礎(chǔ)數(shù)據(jù)類型一樣,例如int類型,char類型 只不過結(jié)構(gòu)體可以做成你想要的數(shù)據(jù)類型。以方便日后的使用。 在實際項目中,結(jié)構(gòu)體是大量存在的。研發(fā)人員常使用結(jié)構(gòu)體來封裝一些屬性來組成新的類型。 結(jié)構(gòu)體在函數(shù)中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關(guān)心這個是什么,只要根據(jù)定義使用就可以了。
結(jié)構(gòu)體的大小與內(nèi)存對齊
結(jié)構(gòu)體的大小不是結(jié)構(gòu)體元素單純相加就行的,因為我們現(xiàn)在主流的計算機使用的都是32Bit字長的CPU,對這類型的CPU取4個字節(jié)的數(shù)要比取一個字節(jié)要高效,也更方便。所以在結(jié)構(gòu)體中每個成員的首地址都是4的整數(shù)倍的話,取數(shù)據(jù)元素是就會相對更高效,這就是內(nèi)存對齊的由來。每個特定平臺上的編譯器都有自己的默認“對齊系數(shù)”(也叫對齊模數(shù))。程序員可以通過預編譯命令#pragma pack(n),n=1,2,4,8,16來改變這一系數(shù),其中的n就是你要指定的“對齊系數(shù)”。 規(guī)則: 1、數(shù)據(jù)成員對齊規(guī)則:結(jié)構(gòu)(struct)(或聯(lián)合(union))的數(shù)據(jù)成員,第一個數(shù)據(jù)成員放在offset為0的地方,以后每個數(shù)據(jù)成員的對齊按照#pragma pack指定的數(shù)值和這個數(shù)據(jù)成員自身長度中,比較小的那個進行。 2、結(jié)構(gòu)(或聯(lián)合)的整體對齊規(guī)則:在數(shù)據(jù)成員完成各自對齊之后,結(jié)構(gòu)(或聯(lián)合)本身也要進行對齊,對齊將按照#pragma pack指定的數(shù)值和結(jié)構(gòu)(或聯(lián)合)最大數(shù)據(jù)成員長度中,比較小的那個進行。 3、結(jié)合1、2顆推斷:當#pragma pack的n值等于或超過所有數(shù)據(jù)成員長度的時候,這個n值的大小將不產(chǎn)生任何效果。
C++中的結(jié)構(gòu)體
在C語言中,可以定義結(jié)構(gòu)體類型,將多個相關(guān)的變量包裝成為一個整體使用。在結(jié)構(gòu)體中的變量,可以是相同、部分相同,或完全不同的數(shù)據(jù)類型。在C語言中,結(jié)構(gòu)體不能包含函數(shù)。在面向?qū)ο蟮某绦蛟O計中,對象具有狀態(tài)(屬性)和行為,狀態(tài)保存在成員變量中,行為通過成員方法(函數(shù))來實現(xiàn)。C語言中的結(jié)構(gòu)體只能描述一個對象的狀態(tài),不能描述一個對象的行為。在C++中,考慮到C語言到C++語言過渡的連續(xù)性,對結(jié)構(gòu)體進行了擴展,C++的結(jié)構(gòu)體可以包含函數(shù),這樣,C++的結(jié)構(gòu)體也具有類的功能,與class不同的是,結(jié)構(gòu)體包含的函數(shù)默認為public,而不是private。
C++控制臺輸出例子: #include cstdlib
#include iostream //定義結(jié)構(gòu)體
struct point { //包含兩個變量成員
int x;
int y; };
using namespace std;
int main(int argc, char *argv[])
{ struct point pt;
pt.x=1; pt.y=2;
coutpt.xendlpt.yendl;
return EXIT_SUCCESS;
}
結(jié)構(gòu)體的一些性質(zhì)和作用:
結(jié)構(gòu)體和其他類型基礎(chǔ)數(shù)據(jù)類型一樣,例如int類型,char類型 只不過結(jié)構(gòu)體可以做成你想要的數(shù)據(jù)類型。以方便日后的使用。 在項目中,結(jié)構(gòu)體是大量存在的。研發(fā)人員常使用結(jié)構(gòu)體來封裝一些屬性來組成新的類型。 結(jié)構(gòu)體在函數(shù)中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關(guān)心這個是什么,只要根據(jù)定義使用就可以了。
上面都是概念性的問題,可以這么理解:一個結(jié)構(gòu)體就是一個變量,.就像 int i;一樣。int 變量類型, i是變量名。比喻如果有結(jié)構(gòu)體定義如下:
struct student
{int num;
char name[20];
char sex;
}zhangsan,lisi;
表示定義了: student zhangsan;(類似如 int i;)
student zhangsan;(類似如 int j;)
當然它和變量有不一樣的地方,不然直接也叫變量算了!!!!!
可以賦值 zhangsan.name="ZhangSan";
lisi.sex="MEN";等
c語言結(jié)構(gòu)體能放函數(shù)嗎
不能,只能放數(shù)據(jù),想要放函數(shù)的話,搞一個指向函數(shù)的指針,把指針放進結(jié)構(gòu)體里就可以了。
c++中結(jié)構(gòu)體是什么?有什么用?
在C語言中,可以定義結(jié)構(gòu)體類型,將多個相關(guān)的變量包裝成為一個整體使用。在結(jié)構(gòu)體中的變量,可以是相同、部分相同,或完全不同的數(shù)據(jù)類型。在C語言中,結(jié)構(gòu)體不能包含函數(shù)。在面向?qū)ο蟮某绦蛟O計中,對象具有狀態(tài)(屬性)和行為,狀態(tài)保存在成員變量中,行為通過成員方法(函數(shù))來實現(xiàn)。C語言中的結(jié)構(gòu)體只能描述一個對象的狀態(tài),不能描述一個對象的行為。在C++中,考慮到C語言到C++語言過渡的連續(xù)性,對結(jié)構(gòu)體進行了擴展,C++的結(jié)構(gòu)體可以包含函數(shù),這樣,C++的結(jié)構(gòu)體也具有類的功能,與class不同的是,結(jié)構(gòu)體包含的函數(shù)默認為public,而不是private
結(jié)構(gòu)體的一些性質(zhì)和作用:
結(jié)構(gòu)體和其他類型基礎(chǔ)數(shù)據(jù)類型一樣,例如int類型,char類型
只不過結(jié)構(gòu)體可以做成你想要的數(shù)據(jù)類型。以方便日后的使用。
在項目中,結(jié)構(gòu)體是大量存在的。研發(fā)人員常使用結(jié)構(gòu)體來封裝一些屬性來組成新的類型。
結(jié)構(gòu)體在函數(shù)中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關(guān)心這個是什么,只要根據(jù)定義使用就可以了。
在C語言中struct結(jié)構(gòu)體里面 不能定義函數(shù)么?
c中不能,c++里可以在結(jié)構(gòu)體內(nèi)定義函數(shù),用法和class定義類是一樣的,說穿了struct 和 class用法相同,但要注意的一點是,struct默認的是public類型,而class默認的是private類型的
文章名稱:c語言結(jié)構(gòu)體包含函數(shù)嗎 c語言結(jié)構(gòu)體有構(gòu)造函數(shù)嗎
轉(zhuǎn)載源于:http://ef60e0e.cn/article/doecpoj.html