由一個(gè)或多個(gè)基礎(chǔ)類(lèi)型組合出來(lái)的一個(gè)新的復(fù)合類(lèi)型。
struct student_t{
int sn;
char name[32];
int age;
};
結(jié)構(gòu)體變量的定義struct student_t stu;
結(jié)構(gòu)體可以在全局聲明,也可以在某個(gè)函數(shù)內(nèi)部進(jìn)行聲明,但是局部聲明的類(lèi)型除了作用域就無(wú)法被訪問(wèn)。可以在聲明結(jié)構(gòu)體的同時(shí)定義變量。
類(lèi)型定義,基于一個(gè)原始的類(lèi)型 ,定義出一個(gè)新的類(lèi)型。
基于struct student_t類(lèi)型定義了一個(gè)新的類(lèi)型Student,此時(shí)的Student是一個(gè)類(lèi)型。
typedef常用于復(fù)雜數(shù)據(jù)類(lèi)型的類(lèi)型定義,可以大大簡(jiǎn)化結(jié)構(gòu)體類(lèi)型名的使用。
結(jié)構(gòu)體數(shù)組的定義與使用#include#includetypedef struct student_t{
int sn;
char name[32];
int age;
}Student;
typedef struct student_t Stu;
int main()
{
struct student_t stu = { 2, "小紅", 18 };
Student stu1 = { 1, "小明", 18 };
Stu stu2[]={
{ 1, "小明", 18 },
{ 2, "小紅", 19 },
{ 3, "小藍(lán)", 20 }
};
for (int i = 0; i< sizeof(stu2) / sizeof(stu2[0]); i++)
{
printf("學(xué)號(hào):%3d\t姓名:%6s\t年齡:%3d\n", stu2[i].sn, (*(stu2+i)).name, (stu2+i)->age);
}
struct student_t *pstu = &stu1;
printf("學(xué)號(hào):%d\n", stu.sn);
printf("姓名:%s\n", stu.name);
printf("年齡:%d\n", stu.age);
printf("學(xué)號(hào):%d\n", (*pstu).sn);
printf("姓名:%s\n", pstu->name);
printf("年齡:%d\n", pstu->age);
system("pause");
return 0;
}
#include#includetypedef struct student_t{
int sn;
char name[32];
int age;
}Student;//Student是一個(gè)類(lèi)型
typedef struct class_t{
int id;
char name[32];
int stu_count;
struct student_t stu_arry[50];//嵌套定義struct student_t類(lèi)型
}Class;//Class是一個(gè)類(lèi)型
int main()
{
Class class = { 1, "一年級(jí)一班", 2, { { 1, "小明", 18 }, { 2, "小紅", 19 } } };
printf("%10s %10s %10s\n", "班級(jí)ID", "班級(jí)名稱(chēng)","班級(jí)數(shù)量");
printf("%10d %10s %10d\n", class.id, class.name, class.stu_count);
for (int i = 0; i< class.stu_count; i++)
{
printf("學(xué)號(hào):%3d\t姓名:%6s\t年齡:%3d\n", class.stu_arry[i].sn, class.stu_arry[i].name, class.stu_arry[i].age);
}
system("pause");
return 0;
}
結(jié)構(gòu)體類(lèi)型成員的類(lèi)型是否可以是結(jié)構(gòu)體自身類(lèi)型?
stu成員定義時(shí),student_t類(lèi)型還沒(méi)有定義完畢,這時(shí)候的struct student_t還不是一個(gè)完整的類(lèi)型。
但是,定義結(jié)構(gòu)體自身類(lèi)型的指針是可以的。因?yàn)椋羔橆?lèi)型的成員變量大小固定,跟結(jié)構(gòu)體類(lèi)型是否定義完畢無(wú)關(guān)。
結(jié)構(gòu)體成員的存儲(chǔ)struct student_t{
? ? int sn;//4字節(jié)空間
? ? char name[32];//32字節(jié)空間
}stu;
stu變量的存儲(chǔ):結(jié)構(gòu)體中每一個(gè)成員變量都要占空間,成員變量的名稱(chēng)就代表了一整塊空間中的某個(gè)子塊。
stu.sn=1;
strcpy(stu.name,"hello");//字符串的賦值
結(jié)構(gòu)體變量的傳參#include#include#includestruct studen_t{
int sn;
char name[32];
};
void func1(struct studen_t stu)
{
printf("%d---%s\n", stu.sn, stu.name);
}
void func2(struct studen_t *pstu)
{
pstu->sn = 2;
strcpy(pstu->name, "小紅");//結(jié)構(gòu)體中字符串的賦值
}
int main()
{
struct studen_t stu = { 1, "小明" };
func1(stu);
func2(&stu);
//傳遞空間地址進(jìn)入函數(shù),不僅可以訪問(wèn)地址所指向的空間,還可以修改所指向空間的值
func1(stu);
system("pause");
return 0;
}
數(shù)組傳參:
#include#include#includestruct studen_t{
int sn;
char name[32];
};
void func(struct studen_t *pstu)
{
pstu->sn = 21;
strcpy(pstu->name, "小紅");//結(jié)構(gòu)體中字符串的賦值
}
int main()
{
struct studen_t arry[3] = {
{ 1, "張三" },
{ 2, "李四" },
{ 3, "王五" }
};
func(arry);//arry是數(shù)組名,是數(shù)組首元素的地址,傳遞進(jìn)入?yún)?shù)后,即修改數(shù)組首元素的值
for (int i = 0; i< 3; i++)
{
printf("學(xué)號(hào):%2d 姓名:%s\n", arry[i].sn, arry[i].name);
}
system("pause");
return 0;
}
因?yàn)榻Y(jié)構(gòu)體類(lèi)型占用空間較大,所以結(jié)構(gòu)體傳參時(shí)一般采用 傳址操作(形參是地址,指針大小固定為4/8字節(jié))。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
本文題目:C語(yǔ)言-結(jié)構(gòu)體-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://www.chinadenli.net/article32/dsojpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站導(dǎo)航、網(wǎng)頁(yè)設(shè)計(jì)公司、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容