首先,定義一個(gè)結(jié)構(gòu)的一般形式為:
在乾安等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),成都營銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站制作,乾安網(wǎng)站建設(shè)費(fèi)用合理。
struct結(jié)構(gòu)名
{
//成員表列
};
成員表由若干個(gè)成員組成,?每個(gè)成員都是該結(jié)構(gòu)的一個(gè)組成部分。對每個(gè)成員也必須作類型說明,其形式為:“類型說明符?成員名;”。成員名的命名應(yīng)符合標(biāo)識(shí)符的書寫規(guī)定。例如:
struct?stu
{
int?num;
char?name[20];
char?sex;
float?score;
};
在這個(gè)結(jié)構(gòu)定義中,結(jié)構(gòu)名為stu,該結(jié)構(gòu)由4個(gè)成員組成。?第一個(gè)成員為num,整型變量;第二個(gè)成員為name,字符型數(shù)組;第三個(gè)成員為sex,字符型變量;第四個(gè)成員為score,浮點(diǎn)型變量。?應(yīng)注意在括號(hào)后的分號(hào)是必不可少的。
然后,當(dāng)結(jié)構(gòu)定義完成后,即創(chuàng)建了一種數(shù)據(jù)類型,可以像int、float等內(nèi)置類型一樣使用,以上面定義的stu結(jié)構(gòu)體來和int類型對比著看。
int?a;//定義一個(gè)int類型的變量a
stu?a;?//定義一個(gè)stu類型的變量a
int?*p;?//定義一個(gè)int類型的指針p
stu?*p;?//定義一個(gè)stu類型的指針p
int?a[10];//定義一個(gè)int類型的數(shù)組a,它有10個(gè)元素,每個(gè)元素是int類型
stu?a[10];//定義一個(gè)stu類型的數(shù)組a,它有10個(gè)元素,每個(gè)元素是stu類型。
可以在外部定義結(jié)構(gòu)體類型,然后在主函數(shù)內(nèi)部定義該類型的變量。在輸入輸出函數(shù)調(diào)用時(shí),以結(jié)構(gòu)體變量指針做為參數(shù)傳遞。
參考代碼如下:
#include?stdio.h
struct?test
{
int?a;
};//定義結(jié)構(gòu)體類型struct?test。
void?input(struct?test*?p)//輸入函數(shù),以指針作為參數(shù)。
{
scanf("%d",p-a);
}
void?output(struct?test?*p)//輸出函數(shù),以指針作為參數(shù)。這里也可以以結(jié)構(gòu)體變量作為參數(shù),不過用指針效率更高。
{
printf("%d\n",?p-a);
}
int?main()
{
struct?test?v;//定義結(jié)構(gòu)體變量v。
input(v);//輸入。
output(v);//輸出。
return?0;
}
1、什么叫在主函數(shù)中定義在主函數(shù)之外使用。如果指的是在外函數(shù)中作為數(shù)據(jù)結(jié)構(gòu)引用,那是做不到的,這是C/C++的基本結(jié)構(gòu)決定的,也是基本常識(shí);因?yàn)橹骱瘮?shù)也是函數(shù),在函數(shù)中定義的結(jié)構(gòu)體是局部性質(zhì),只能在定義它的主函數(shù)中可見.如果是主函數(shù)調(diào)用的某個(gè)函數(shù)使用,那就把結(jié)構(gòu)體當(dāng)作實(shí)參傳給被調(diào)函數(shù)就行了。
2、但這不叫在外函數(shù)中使用,實(shí)質(zhì)是在主函數(shù)中使用;而且,被調(diào)函數(shù)必須要有相同的結(jié)構(gòu)體類型變量來接收,那“相同的結(jié)構(gòu)體類型”,還得在主函數(shù)外定義,這實(shí)在是得不償失,用個(gè)指針什么都解決了.
結(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)體類型的指針,而通常這種指針的應(yīng)用是為了實(shí)現(xiàn)一些更高級(jí)的數(shù)據(jù)結(jié)構(gòu)如鏈表和樹等。如果兩個(gè)結(jié)構(gòu)體互相包含,則需要對其中一個(gè)結(jié)構(gòu)體進(jìn)行不完整聲明。
擴(kuò)展資料:
一、結(jié)構(gòu)體作用:
結(jié)構(gòu)體和其他類型基礎(chǔ)數(shù)據(jù)類型一樣,例如int類型,char類型,只不過結(jié)構(gòu)體可以做成你想要的數(shù)據(jù)類型,以方便日后的使用。
在實(shí)際項(xiàng)目中,結(jié)構(gòu)體是大量存在的,研發(fā)人員常使用結(jié)構(gòu)體來封裝一些屬性來組成新的類型。由于C語言內(nèi)部程序比較簡單,研發(fā)人員通常使用結(jié)構(gòu)體創(chuàng)造新的“屬性”,其目的是簡化運(yùn)算。
結(jié)構(gòu)體在函數(shù)中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關(guān)心這個(gè)是什么,只要根據(jù)定義使用就可以了。
二、結(jié)構(gòu)體的大小與內(nèi)存對齊:
結(jié)構(gòu)體的大小不是結(jié)構(gòu)體元素單純相加就行的,因?yàn)槲覀冎髁鞯挠?jì)算機(jī)使用的都是32bit字長的CPU,對這類型的CPU取4個(gè)字節(jié)的數(shù)要比取一個(gè)字節(jié)要高效,也更方便。
所以在結(jié)構(gòu)體中每個(gè)成員的首地址都是4的整數(shù)倍的話,取數(shù)據(jù)元素時(shí)就會(huì)相對更高效,這就是內(nèi)存對齊的由來。每個(gè)特定平臺(tái)上的編譯器都有自己的默認(rèn)“對齊系數(shù)”(也叫對齊模數(shù))。
程序員可以通過預(yù)編譯命令#pragma pack(n),n=1,2,4,8,16來改變這一系數(shù),其中的n就是你要指定的“對齊系數(shù)”。
三、結(jié)構(gòu)體的規(guī)則:
1、數(shù)據(jù)成員對齊規(guī)則:結(jié)構(gòu)(struct)(或聯(lián)合(union))的數(shù)據(jù)成員,第一個(gè)數(shù)據(jù)成員放在offset為0的地方,以后每個(gè)數(shù)據(jù)成員的對齊按照#pragma pack指定的數(shù)值和這個(gè)數(shù)據(jù)成員自身長度中,比較小的那個(gè)進(jìn)行。
2、結(jié)構(gòu)(或聯(lián)合)的整體對齊規(guī)則:在數(shù)據(jù)成員完成各自對齊之后,結(jié)構(gòu)(或聯(lián)合)本身也要進(jìn)行對齊,對齊將按照#pragma pack指定的數(shù)值和結(jié)構(gòu)(或聯(lián)合)最大數(shù)據(jù)成員長度中,比較小的那個(gè)進(jìn)行。
3、結(jié)合1、2可推斷:當(dāng)#pragma pack的n值等于或超過所有數(shù)據(jù)成員長度的時(shí)候,這個(gè)n值的大小將不產(chǎn)生任何效果。
參考資料來源:百度百科-結(jié)構(gòu)體
#includestdio.h
#define N 5
struct st{
int id;
char name[30];
char sex[5];
int x;
int y;
int z;
}s[N];
void input()
{
for(int i=0;iN;i++)
scanf("%d%s%s%d%d%d",s[i].id,s[i].name,s[i].sex,s[i].x,s[i].y,s[i].z);
}
void print()
{
for(int i=0;iN;i++)
printf("%d %s %s %d %d %d\n",s[i].id,s[i].name,s[i].sex,s[i].x,s[i].y,s[i].z);
}
main()
{
input();//調(diào)用輸入函數(shù)
print();//調(diào)用輸出函數(shù)
}
新聞名稱:c語言聲明結(jié)構(gòu)體變量函數(shù) c語言的結(jié)構(gòu)變量
瀏覽地址:http://chinadenli.net/article32/dodicpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、域名注冊、App設(shè)計(jì)、關(guān)鍵詞優(yōu)化、網(wǎng)站內(nèi)鏈、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)