美國留學(xué)選擇什么專業(yè)好?留學(xué)美國熱門專業(yè)推薦
2019-06-26
更新時(shí)間:2024-08-13 05:59作者:小樂
1、結(jié)構(gòu)體類型定義定義方法一:
Typedef struct LNode { int 數(shù)據(jù); //數(shù)據(jù)字段struct LNode *next; //指針字段} *LinkList;定義方法2:
struct LNode { int 數(shù)據(jù); //數(shù)據(jù)字段struct LNode *next; //指針字段}; Typedef struct LNode *LinkList;上述兩種定義方法是等價(jià)的。 *LinkList被定義為struct LNode類型,即LinkList被定義為類型名。這樣就可以使用LinkList來定義新的變量,如:
鏈接表L;即,將L定義為struct LNode類型的指針變量。
2、結(jié)構(gòu)體類型變量定義定義方法一:
struct LNode { int 數(shù)據(jù); //數(shù)據(jù)字段struct LNode *next; //指針字段}LnodeA;定義方法2:
struct LNode { int 數(shù)據(jù); //數(shù)據(jù)域struct LNode *next; //指針域};結(jié)構(gòu)LNode LnodeA;上面兩種定義方法也是等價(jià)的,所以LnodeA被定義為struct LNode類型的變量,即LnodeA是struct LNode類型的變量名。
如何定義結(jié)構(gòu)內(nèi)部下標(biāo)1.結(jié)構(gòu)、透明表區(qū)域、DATA ELEMENT、DOMAIN 透明表是物理表的邏輯描述。透明表中有很多字段,有些字段定義為PRIMARY KEY,字段中包含DATA ELEMENT,用于描述語言屬性和技術(shù)屬性。 DATA ELEMENT 還包含DOMAIN,它定義數(shù)據(jù)類型和字段長度。
結(jié)構(gòu)體一般用來定義結(jié)構(gòu)體變量,用于存儲(chǔ)臨時(shí)數(shù)據(jù)。沒有主鍵。該結(jié)構(gòu)包含COMPONENT 而不是FIELD。
2、Internal表中的屬性分為三種類型:LINE TYPE、KEY、TABLE KIND。 LINE TYPE INTERNAL TABLE 中的單行稱為LINE TYPE,每行的結(jié)構(gòu)都是相同的。
KEY:相當(dāng)于數(shù)據(jù)庫中的主鍵。在排序時(shí)有用,唯一或非唯一。
TABLE KIND:分為STANDARD、SORTED、HASHED。
標(biāo)準(zhǔn)表定義了三種類型的內(nèi)部表:
數(shù)據(jù)itab1 類型帶有非唯一密鑰載體的斯卡爾標(biāo)準(zhǔn)表。排序表:
數(shù)據(jù)itab2 類型排序表的疤痕與非唯一的關(guān)鍵載體。哈希表:
數(shù)據(jù)itab3 類型帶有唯一密鑰載體的斯卡的哈希表。通用定義方法(標(biāo)準(zhǔn)表) 根據(jù)數(shù)據(jù)庫表定義標(biāo)準(zhǔn)表
數(shù)據(jù)itab4 類型表的疤痕。根據(jù)自建結(jié)構(gòu)變量定義標(biāo)準(zhǔn)表(最常用)
DATA: wa 開頭,carrid 類型carr-carrid,carrnamen 類型scarr-carrname,WA 結(jié)尾。DATA itab5 類似于wa 表。根據(jù)數(shù)據(jù)字典中的表類型定義標(biāo)準(zhǔn)表
數(shù)據(jù)itab6 類型ztabtype00_1。根據(jù)內(nèi)表定義內(nèi)表
數(shù)據(jù)itab7 與itab6 類似。根據(jù)內(nèi)表定義結(jié)構(gòu)
數(shù)據(jù)wa1 類似于itab7.3 的行。如何定義結(jié)構(gòu)
根據(jù)數(shù)據(jù)字典中的表或結(jié)構(gòu)定義程序的結(jié)構(gòu)變量(或類型)
類型str1 類型spfli.data str2 類型sflight。自定義程序中的結(jié)構(gòu)變量(或類型) - 最常見
data: wa 開頭,載體類型spfli-carrid,com(10) 類型c,wa 結(jié)尾。根據(jù)內(nèi)表定義結(jié)構(gòu)
數(shù)據(jù)就像itab 的行。注意:根據(jù)數(shù)據(jù)庫表定義的結(jié)構(gòu)必須是
同名字段的賦值(重要)
move-對(duì)應(yīng)A到B.read是從內(nèi)表讀取一條數(shù)據(jù)
像wa 表一樣讀取itab 表。使用循環(huán)從內(nèi)表讀取多條數(shù)據(jù)
在itab 處循環(huán)進(jìn)入wa.C/C++ 語言中的解釋結(jié)構(gòu)定義
結(jié)構(gòu)體(struct)是由一系列相同類型或不同類型的數(shù)據(jù)組成的數(shù)據(jù)集合,也稱為結(jié)構(gòu)體。
結(jié)構(gòu)作用
結(jié)構(gòu)體與其他基本數(shù)據(jù)類型相同,如int類型、char類型,但結(jié)構(gòu)體可以做成你想要的數(shù)據(jù)類型。以方便日后使用。
在實(shí)際項(xiàng)目中,存在大量的結(jié)構(gòu)。開發(fā)人員經(jīng)常使用結(jié)構(gòu)來封裝一些屬性以形成新類型。
結(jié)構(gòu)體在函數(shù)中的作用不是方便,而是主要作用是封裝。封裝的好處是可以重復(fù)使用。用戶不需要關(guān)心這是什么,只要按照定義使用就可以了。
結(jié)構(gòu)體的大小與內(nèi)存對(duì)齊
結(jié)構(gòu)體的大小不能通過簡單地添加結(jié)構(gòu)體的元素來確定,因?yàn)槲覀兡壳暗闹髁饔?jì)算機(jī)使用的是32位字長的CPU。對(duì)于這種類型的CPU,占用4個(gè)字節(jié)比占用1個(gè)字節(jié)效率更高。而且更方便。因此,如果結(jié)構(gòu)體中每個(gè)成員的首地址都是4的整數(shù)倍,那么檢索數(shù)據(jù)元素的效率會(huì)相對(duì)更高。這就是內(nèi)存對(duì)齊的由來。
特定平臺(tái)上的每個(gè)編譯器都有自己的默認(rèn)“對(duì)齊因子”(也稱為對(duì)齊模數(shù))。程序員可以通過預(yù)編譯命令#pragma pack(n)來改變這個(gè)系數(shù),n=1,2,4,8,16,其中n是你想要指定的‘對(duì)齊系數(shù)’。
規(guī)則:
1. 數(shù)據(jù)成員對(duì)齊規(guī)則:對(duì)于結(jié)構(gòu)體(struct)(或聯(lián)合)的數(shù)據(jù)成員,第一個(gè)數(shù)據(jù)成員放置在偏移量0處。后續(xù)每個(gè)數(shù)據(jù)成員的對(duì)齊基于#pragma pack指定的值和和。使用數(shù)據(jù)成員自身長度中較小的一個(gè)。 2、結(jié)構(gòu)體(或聯(lián)合體)的整體對(duì)齊規(guī)則:數(shù)據(jù)成員完成各自的對(duì)齊后,結(jié)構(gòu)體(或聯(lián)合體)本身也必須對(duì)齊。對(duì)齊將基于span #pragma pack 指定的值和結(jié)構(gòu)(或聯(lián)合)的最大數(shù)據(jù)成員。使用較小的長度。 3. 結(jié)合1和2推論:當(dāng)#pragma pack的n值等于或超過所有數(shù)據(jù)成員的長度時(shí),n值的大小將不起作用。 C++中的結(jié)構(gòu)體在C語言中,可以定義一個(gè)結(jié)構(gòu)體類型,將多個(gè)相關(guān)的變量打包成一個(gè)整體來使用。結(jié)構(gòu)中的變量可以具有相同、部分相同或完全不同的數(shù)據(jù)類型。在C語言中,結(jié)構(gòu)體不能包含函數(shù)。在面向?qū)ο缶幊讨?,?duì)象具有狀態(tài)(屬性)和行為。狀態(tài)存儲(chǔ)在成員變量中,行為通過成員方法(函數(shù))實(shí)現(xiàn)。 C語言中的結(jié)構(gòu)體只能描述對(duì)象的狀態(tài),而不能描述對(duì)象的行為。在C++中,考慮到從C語言到C++語言過渡的連續(xù)性,對(duì)結(jié)構(gòu)進(jìn)行了擴(kuò)展。 C++的結(jié)構(gòu)可以包含函數(shù)。這樣,C++的結(jié)構(gòu)體也就具備了類的功能。與類不同,主體中包含的結(jié)構(gòu)Function 默認(rèn)是公共的,而不是私有的。
C++ 控制臺(tái)輸出示例:
示例#include
#include //定義結(jié)構(gòu)體
使用命名空間std;
結(jié)構(gòu)點(diǎn)
{
//包含兩個(gè)變量成員
整數(shù)x;
整數(shù)y;
};
int main(int argc, char *argv[])
{
結(jié)構(gòu)點(diǎn)pt;
pt.x=1;
點(diǎn)y=2;
庫特
返回退出_成功;
}
C++中結(jié)構(gòu)體和類的區(qū)別
C++ 中的類和結(jié)構(gòu)之間只有兩點(diǎn)區(qū)別,除此之外沒有其他區(qū)別。
(1)默認(rèn)成員訪問權(quán)限在class中是private,而在struct中是public。 (2)從class繼承默認(rèn)為私有繼承,從struct繼承默認(rèn)為公有繼承。這兩個(gè)定義有什么區(qū)別?
typedef 結(jié)構(gòu)學(xué)生{ int num; struct Student *next;}student;struct Student{ int num; struct Student *next;};第二個(gè)struct Student定義了一個(gè)student結(jié)構(gòu)體,這個(gè)你懂的。
第一個(gè)是使用typedef將structstudent的結(jié)構(gòu)體類型名重新定義為student。也就是說structstudent和student代表的是同一個(gè)東西,都是同一類型的標(biāo)識(shí)符。例如,typedef int zhengshu;意味著你替換了整數(shù)類型int。將其重命名為zhengshu,并定義如下: int i;和正數(shù)我;是等價(jià)的。
結(jié)構(gòu)體是由基本數(shù)據(jù)類型組成并以標(biāo)識(shí)符命名的變量的組合。結(jié)構(gòu)中可以使用不同的數(shù)據(jù)類型。
結(jié)構(gòu)體描述和結(jié)構(gòu)體變量定義在Turbo C中,結(jié)構(gòu)體也是一種數(shù)據(jù)類型,可以使用結(jié)構(gòu)體變量。因此,與其他類型的變量一樣,結(jié)構(gòu)體變量在使用之前必須先定義。
定義結(jié)構(gòu)體變量的通用格式是:
struct 結(jié)構(gòu)體名{類型變量名;類型變量名;} 結(jié)構(gòu)變量;結(jié)構(gòu)體名稱是結(jié)構(gòu)體的標(biāo)識(shí)符,而不是變量名。
這些類型是第2 節(jié)中描述的五種數(shù)據(jù)類型(整數(shù)、浮點(diǎn)、字符、指針和無值)。
組成結(jié)構(gòu)的每個(gè)類型變量稱為結(jié)構(gòu)成員。它就像數(shù)組的元素,但數(shù)組中的元素是通過下標(biāo)訪問的,而結(jié)構(gòu)體的成員是通過變量名訪問的。
下面通過一個(gè)例子來說明如何定義結(jié)構(gòu)體變量。
結(jié)構(gòu)字符串{ 字符名稱[8];年齡;字符性別[4];字符離開[20];浮動(dòng)工資1,工資2,工資3; }人;本示例定義了一個(gè)名為string 的結(jié)構(gòu)體變量person。如果省略變量名person 就成為結(jié)構(gòu)的描述。結(jié)構(gòu)變量也可以使用聲明的結(jié)構(gòu)名稱來定義。這樣定義后,上面的例子就變成了:
結(jié)構(gòu)字符串{ 字符名稱[8];年齡;字符性別[4];字符離開[20];浮動(dòng)工資1,工資2,工資3; };結(jié)構(gòu)字符串人;如果需要定義多個(gè)相同形式的結(jié)構(gòu)變量,則使用這種方法比較方便。它首先描述結(jié)構(gòu),然后使用結(jié)構(gòu)名稱來定義變量。
例如:
struct string Tianyr, 六七,如果省略結(jié)構(gòu)體名稱,則稱為無名結(jié)構(gòu)體。這種情況經(jīng)常發(fā)生在函數(shù)內(nèi)部。當(dāng)使用這個(gè)結(jié)構(gòu)時(shí),前面的例子就變成了:
結(jié)構(gòu)體{ 字符名[8];年齡;字符性別[4];字符離開[20];浮動(dòng)工資1,工資2,工資3; } Tianyr,劉琪;結(jié)構(gòu)體變量的使用結(jié)構(gòu)體是一種新的數(shù)據(jù)類型,因此結(jié)構(gòu)體變量也可以像其他類型的變量一樣進(jìn)行賦值和操作。不同的是,結(jié)構(gòu)體變量使用成員作為基本變量。
結(jié)構(gòu)體成員的表示為:
結(jié)構(gòu)體變量.成員名如果將結(jié)構(gòu)體變量.成員名視為一個(gè)整體,則該整體的數(shù)據(jù)類型與結(jié)構(gòu)體中成員的數(shù)據(jù)類型相同,因此可以像上面提到的變量一樣使用。
下面的示例定義了一個(gè)結(jié)構(gòu)體變量,其中每個(gè)成員從鍵盤接收數(shù)據(jù),然后對(duì)結(jié)構(gòu)體中的浮點(diǎn)數(shù)求和并顯示結(jié)果。請(qǐng)注意本例中對(duì)不同結(jié)構(gòu)成員的訪問。
示例#include
包括
int main()
{
結(jié)構(gòu)體
{
字符名稱[8];
年齡;
字符性別[4];
字符離開[20];
浮動(dòng)工資1,工資2,工資3;
}一個(gè);
浮動(dòng)工資;
字符c='Y';
while(c=='Y'||c=='y')
{
printf(\n名稱:);
scanf(%s, a.name);
printf(Age:);
scanf(%d, a.工資);
printf(Sex:);
scanf(%s, a.性別);
printf(Dept:);
scanf(%s, a.depart);
printf(Wage1:);
scanf(%f, a.wage1);
printf(Wage2:);
scanf(%f, a.wage2);
printf(Wage3:);
scanf(%f, a.wage3);
工資=a.工資1+a.工資2+a.工資3;
printf(工資總和為%6.2f\n,工資);
printf(繼續(xù));
c=getche();
}
}
結(jié)構(gòu)體數(shù)組和結(jié)構(gòu)體指針結(jié)構(gòu)體是一種新的數(shù)據(jù)類型,還可以有結(jié)構(gòu)體數(shù)組和結(jié)構(gòu)體指針。
1. 結(jié)構(gòu)體數(shù)組
結(jié)構(gòu)體數(shù)組是具有相同結(jié)構(gòu)類型的變量的集合。如果要定義一個(gè)班級(jí)40個(gè)學(xué)生的姓名、性別、年齡和地址,可以將其定義為結(jié)構(gòu)數(shù)組。如下圖:
結(jié)構(gòu){ 字符名稱[8];字符性別[4];年齡;字符地址[40]; }學(xué)生[40];也可以定義為:
結(jié)構(gòu)字符串{ 字符名稱[8];字符性別[4];年齡;字符地址[40]; };結(jié)構(gòu)字符串學(xué)生[40];需要指出的是,結(jié)構(gòu)體數(shù)組成員的訪問是以數(shù)組元素作為結(jié)構(gòu)體變量進(jìn)行的,其形式為:
結(jié)構(gòu)數(shù)組元素。會(huì)員名稱,例如:
Student[0].name Student[30].age 其實(shí)結(jié)構(gòu)體數(shù)組就相當(dāng)于一個(gè)二維結(jié)構(gòu)體。第一維是結(jié)構(gòu)體數(shù)組元素,每個(gè)元素是一個(gè)結(jié)構(gòu)體變量,第二維是結(jié)構(gòu)體成員。
請(qǐng)注意, 結(jié)構(gòu)體數(shù)組的成員也可以是數(shù)組變量。
例如:
struct a { int m[3][5];浮動(dòng)f;字符s[20]; }y[4];為了訪問結(jié)構(gòu)體a中結(jié)構(gòu)體變量y[2]的這個(gè)變量,可以寫成y[2].m[1][4]
2. 結(jié)構(gòu)體指針
結(jié)構(gòu)體指針是指向結(jié)構(gòu)體的指針。它是通過在結(jié)構(gòu)體變量名稱之前添加* 運(yùn)算符來定義的。例如,使用前面介紹的結(jié)構(gòu)體定義一個(gè)結(jié)構(gòu)體指針如下:
結(jié)構(gòu)字符串{ 字符名稱[8];字符性別[4];年齡;字符地址[40]; }*學(xué)生;也可以省略結(jié)構(gòu)體指針名稱,只做結(jié)構(gòu)體描述,然后使用下面的語句來定義結(jié)構(gòu)體指針。
結(jié)構(gòu)字符串*學(xué)生;使用結(jié)構(gòu)體指針來訪問結(jié)構(gòu)體成員,與結(jié)構(gòu)體變量訪問結(jié)構(gòu)體成員的表達(dá)方式不同。結(jié)構(gòu)體指針對(duì)結(jié)構(gòu)體成員的訪問表示為:
結(jié)構(gòu)指針名稱- 結(jié)構(gòu)成員,其中- 是兩個(gè)符號(hào)- 和的組合,就好像箭頭指向結(jié)構(gòu)成員一樣。例如,要給上面定義的結(jié)構(gòu)體中的name和age賦值,可以使用下面的語句:
strcpy(學(xué)生姓名,陸國昌); Student-age=18;實(shí)際上,student-name是(*student).name的縮寫。
需要指出的是,結(jié)構(gòu)體指針是指向結(jié)構(gòu)體的指針,即結(jié)構(gòu)體中第一個(gè)成員的首地址。因此,結(jié)構(gòu)體指針在使用前應(yīng)進(jìn)行初始化,即分配結(jié)構(gòu)體整個(gè)長度的字節(jié)空間??梢杂孟旅娴暮瘮?shù)來完成,下面仍然用上面的例子來說明:
Student=(struct string*)malloc(size of (struct string));size of (struct string) 自動(dòng)獲取字符串結(jié)構(gòu)體的字節(jié)長度。 malloc()函數(shù)以結(jié)構(gòu)體的長度定義一塊內(nèi)存區(qū)域,然后將其假地址作為結(jié)構(gòu)體指針返回。
注:
1、結(jié)構(gòu)體是一種數(shù)據(jù)類型,所以定義的結(jié)構(gòu)體變量或者結(jié)構(gòu)體指針變量也有局部變量和全局變量,具體取決于定義的位置。 2、結(jié)構(gòu)體變量名并不指向結(jié)構(gòu)體的地址,與數(shù)組名的含義不同。因此,如果需要,結(jié)構(gòu)體中第一個(gè)成員的首地址應(yīng)為[結(jié)構(gòu)體變量名]。 3、結(jié)構(gòu)的復(fù)雜形式:嵌套結(jié)構(gòu)嵌套結(jié)構(gòu)是指一個(gè)結(jié)構(gòu)成員可以包含另一個(gè)結(jié)構(gòu)。 Turbo C 允許這種嵌套。
例如: 下面是一個(gè)嵌套結(jié)構(gòu)
結(jié)構(gòu)字符串{ 字符名稱[8];年齡;結(jié)構(gòu)體地址; } 學(xué)生;其中: addr是另一個(gè)結(jié)構(gòu)體的結(jié)構(gòu)名,必須先解釋一下,即
struct addr{ char 城市[20];未簽名的郵政編碼;電話號(hào)碼[14]; }如果要給student結(jié)構(gòu)體的成員地址結(jié)構(gòu)體中的zipcode賦值,可以寫成:
學(xué)生.地址.zipcode=200001;每個(gè)結(jié)構(gòu)體成員名稱從最外層到最內(nèi)層一一列出,即嵌套結(jié)構(gòu)體成員的表達(dá)式為:
結(jié)構(gòu)體變量名。嵌套結(jié)構(gòu)變量名稱。結(jié)構(gòu)成員名稱??梢杂泻芏嗲短捉Y(jié)構(gòu)。結(jié)構(gòu)體成員名稱是非結(jié)構(gòu)體的最內(nèi)層結(jié)構(gòu)體的成員名稱。