C語(yǔ)言結(jié)構(gòu)體定義:struct為結(jié)構(gòu)體關(guān)鍵字,tag為結(jié)構(gòu)體的標(biāo)志,member-list為結(jié)構(gòu)體成員列表,其必須列出其所有成員;variable-list為此結(jié)構(gòu)體聲明的變量。
目前成都創(chuàng)新互聯(lián)公司已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、綏棱網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
結(jié)構(gòu)體是C語(yǔ)言中聚合數(shù)據(jù)類(lèi)型(aggregatedatatype)的一類(lèi)。結(jié)構(gòu)體可以被聲明為變量、指針或數(shù)組等,用以實(shí)現(xiàn)較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。結(jié)構(gòu)體同時(shí)也是一些元素的集合,這些元素稱(chēng)為結(jié)構(gòu)體的成員(member),且這些成員可以為不同的類(lèi)型,成員一般用名字訪問(wèn)。
擴(kuò)展資料
1、struct是聲明結(jié)構(gòu)體類(lèi)型時(shí)必須使用的關(guān)鍵字,不能省略?!敖Y(jié)構(gòu)體”這個(gè)詞是根據(jù)英文單詞structure譯出的。
2、structSTUDENT是定義的數(shù)據(jù)類(lèi)型的名字,它向編譯系統(tǒng)聲明這是一個(gè)“結(jié)構(gòu)體類(lèi)型”,包括name、num、sex、age、score、addr等不同類(lèi)型的項(xiàng)。
3、structSTUDENT與系統(tǒng)提供的int、char、float、double等標(biāo)準(zhǔn)類(lèi)型名一樣,都是數(shù)據(jù)類(lèi)型,具有同樣的作用,都是用來(lái)定義變量的。
參考資料來(lái)源:百度百科—結(jié)構(gòu)體
方法一:文件包含
//a.c
#includestdio.h
#includestdlib.h
#include"c.c"
main()
{
int b;
g-v=1;
b=a(1);
printf("%d",g-v);
}
//c.c
#includestdio.h
int a(int x)
{
printf("%d",x);
return 0;
}
方法2;頭文件
//a.c
#includestdio.h
#includestdlib.h
#include "b.h"
main()
{
int b;
g-v=1;
b=a(1);
printf("%d",g-v);
}
//b.h定義一個(gè)頭文件
int a(int x);
struct gg;
//c.c
#includestdio.h
int a(int x)
{
printf("%d",x);
return 0;
}
struct gg
{
int v;
}*g;
方法3:外部變量
//c.c
#includestdio.h
extern b
typedef struct gg
{
int v;
}b,*g;
1.結(jié)構(gòu)體類(lèi)型數(shù)據(jù)的定義方法和引用方法
定義結(jié)構(gòu)體:struct 結(jié)構(gòu)體名
{
成員列表
};
定義結(jié)構(gòu)體類(lèi)型的變量:有三種形式
① 定義類(lèi)型時(shí)定義變量:struct 結(jié)構(gòu)體類(lèi)型名
{
成員列表
}變量名列表;
② 直接定義結(jié)構(gòu)類(lèi)型變量:struct
{
成員列表
}變量名列表;
③ 由已定義的結(jié)構(gòu)體類(lèi)型來(lái)定義變量:struct 結(jié)構(gòu)體類(lèi)型名變量名列表;
引用結(jié)構(gòu)體類(lèi)型變量:在定義了結(jié)構(gòu)體類(lèi)型變量后,采用下列方法引用結(jié)構(gòu)體類(lèi)型的
變量:
結(jié)構(gòu)體變量名.成員名
這里"."是成員(分量)運(yùn)算符,它在所有的運(yùn)算符中優(yōu)先級(jí)最高。
使用結(jié)構(gòu)體時(shí)注意:
(1)結(jié)構(gòu)體類(lèi)型和結(jié)構(gòu)體類(lèi)型變量是不同的概念,定義結(jié)構(gòu)體類(lèi)型變量時(shí)應(yīng)先定義
結(jié)構(gòu)體類(lèi)型,然后再定義變量屬于該類(lèi)型。
(2)定義了—個(gè)結(jié)構(gòu)體類(lèi)型后,系統(tǒng)并沒(méi)有為所定義的各成員項(xiàng)分配相應(yīng)的存儲(chǔ)空
間。只有定義了一個(gè)結(jié)構(gòu)體類(lèi)型變量,系統(tǒng)才為所定義的變量分配相應(yīng)的存儲(chǔ)空間。結(jié)構(gòu)
體類(lèi)型變量占用內(nèi)存的字節(jié)數(shù)是所有成員占用內(nèi)存長(zhǎng)度之和。
(3)結(jié)構(gòu)體成員的引用。如果一個(gè)結(jié)構(gòu)體中又嵌套一個(gè)結(jié)構(gòu)體,則要訪問(wèn)一個(gè)成員
時(shí),應(yīng)采取外層向內(nèi)層逐級(jí)訪問(wèn)的方法。
結(jié)構(gòu)體的定義如下所示,struct為結(jié)構(gòu)體關(guān)鍵字,tag為結(jié)構(gòu)體的標(biāo)志,member-list為結(jié)構(gòu)體成員列表,其必須列出其所有成員;variable-list為此結(jié)構(gòu)體聲明的變量。在一般情況下,tag、member-list、variable-list這3部分至少要出現(xiàn)2個(gè)。
結(jié)構(gòu)體的成員可以包含其他結(jié)構(gòu)體,也可以包含指向自己結(jié)構(gòu)體類(lèi)型的指針,而通常這種指針的應(yīng)用是為了實(shí)現(xiàn)一些更高級(jí)的數(shù)據(jù)結(jié)構(gòu)如鏈表和樹(shù)等。如果兩個(gè)結(jié)構(gòu)體互相包含,則需要對(duì)其中一個(gè)結(jié)構(gòu)體進(jìn)行不完整聲明。
擴(kuò)展資料:
一、結(jié)構(gòu)體作用:
結(jié)構(gòu)體和其他類(lèi)型基礎(chǔ)數(shù)據(jù)類(lèi)型一樣,例如int類(lèi)型,char類(lèi)型,只不過(guò)結(jié)構(gòu)體可以做成你想要的數(shù)據(jù)類(lèi)型,以方便日后的使用。
在實(shí)際項(xiàng)目中,結(jié)構(gòu)體是大量存在的,研發(fā)人員常使用結(jié)構(gòu)體來(lái)封裝一些屬性來(lái)組成新的類(lèi)型。由于C語(yǔ)言內(nèi)部程序比較簡(jiǎn)單,研發(fā)人員通常使用結(jié)構(gòu)體創(chuàng)造新的“屬性”,其目的是簡(jiǎn)化運(yùn)算。
結(jié)構(gòu)體在函數(shù)中的作用不是簡(jiǎn)便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關(guān)心這個(gè)是什么,只要根據(jù)定義使用就可以了。
二、結(jié)構(gòu)體的大小與內(nèi)存對(duì)齊:
結(jié)構(gòu)體的大小不是結(jié)構(gòu)體元素單純相加就行的,因?yàn)槲覀冎髁鞯挠?jì)算機(jī)使用的都是32bit字長(zhǎng)的CPU,對(duì)這類(lèi)型的CPU取4個(gè)字節(jié)的數(shù)要比取一個(gè)字節(jié)要高效,也更方便。
所以在結(jié)構(gòu)體中每個(gè)成員的首地址都是4的整數(shù)倍的話,取數(shù)據(jù)元素時(shí)就會(huì)相對(duì)更高效,這就是內(nèi)存對(duì)齊的由來(lái)。每個(gè)特定平臺(tái)上的編譯器都有自己的默認(rèn)“對(duì)齊系數(shù)”(也叫對(duì)齊模數(shù))。
程序員可以通過(guò)預(yù)編譯命令#pragma pack(n),n=1,2,4,8,16來(lái)改變這一系數(shù),其中的n就是你要指定的“對(duì)齊系數(shù)”。
三、結(jié)構(gòu)體的規(guī)則:
1、數(shù)據(jù)成員對(duì)齊規(guī)則:結(jié)構(gòu)(struct)(或聯(lián)合(union))的數(shù)據(jù)成員,第一個(gè)數(shù)據(jù)成員放在offset為0的地方,以后每個(gè)數(shù)據(jù)成員的對(duì)齊按照#pragma pack指定的數(shù)值和這個(gè)數(shù)據(jù)成員自身長(zhǎng)度中,比較小的那個(gè)進(jìn)行。
2、結(jié)構(gòu)(或聯(lián)合)的整體對(duì)齊規(guī)則:在數(shù)據(jù)成員完成各自對(duì)齊之后,結(jié)構(gòu)(或聯(lián)合)本身也要進(jìn)行對(duì)齊,對(duì)齊將按照#pragma pack指定的數(shù)值和結(jié)構(gòu)(或聯(lián)合)最大數(shù)據(jù)成員長(zhǎng)度中,比較小的那個(gè)進(jìn)行。
3、結(jié)合1、2可推斷:當(dāng)#pragma pack的n值等于或超過(guò)所有數(shù)據(jù)成員長(zhǎng)度的時(shí)候,這個(gè)n值的大小將不產(chǎn)生任何效果。
參考資料來(lái)源:百度百科-結(jié)構(gòu)體