由一個或多個基礎類型組合出來的一個新的復合類型。
創(chuàng)新互聯(lián)公司專注于月湖網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供月湖營銷型網(wǎng)站建設,月湖網(wǎng)站制作、月湖網(wǎng)頁設計、月湖網(wǎng)站官網(wǎng)定制、小程序制作服務,打造月湖網(wǎng)絡公司原創(chuàng)品牌,更為您提供月湖網(wǎng)站排名全網(wǎng)營銷落地服務。結(jié)構體類型的聲明struct student_t{
int sn;
char name[32];
int age;
};
結(jié)構體變量的定義struct student_t stu;
結(jié)構體可以在全局聲明,也可以在某個函數(shù)內(nèi)部進行聲明,但是局部聲明的類型除了作用域就無法被訪問。可以在聲明結(jié)構體的同時定義變量。
typedef的作用類型定義,基于一個原始的類型 ,定義出一個新的類型。
基于struct student_t類型定義了一個新的類型Student,此時的Student是一個類型。
typedef常用于復雜數(shù)據(jù)類型的類型定義,可以大大簡化結(jié)構體類型名的使用。
結(jié)構體數(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, "小藍", 20 }
};
for (int i = 0; i< sizeof(stu2) / sizeof(stu2[0]); i++)
{
printf("學號:%3d\t姓名:%6s\t年齡:%3d\n", stu2[i].sn, (*(stu2+i)).name, (stu2+i)->age);
}
struct student_t *pstu = &stu1;
printf("學號:%d\n", stu.sn);
printf("姓名:%s\n", stu.name);
printf("年齡:%d\n", stu.age);
printf("學號:%d\n", (*pstu).sn);
printf("姓名:%s\n", pstu->name);
printf("年齡:%d\n", pstu->age);
system("pause");
return 0;
}
結(jié)構體的嵌套定義#include#includetypedef struct student_t{
int sn;
char name[32];
int age;
}Student;//Student是一個類型
typedef struct class_t{
int id;
char name[32];
int stu_count;
struct student_t stu_arry[50];//嵌套定義struct student_t類型
}Class;//Class是一個類型
int main()
{
Class class = { 1, "一年級一班", 2, { { 1, "小明", 18 }, { 2, "小紅", 19 } } };
printf("%10s %10s %10s\n", "班級ID", "班級名稱","班級數(shù)量");
printf("%10d %10s %10d\n", class.id, class.name, class.stu_count);
for (int i = 0; i< class.stu_count; i++)
{
printf("學號:%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é)構體類型的嵌套定義與使用
結(jié)構體類型的成員自引用結(jié)構體類型成員的類型是否可以是結(jié)構體自身類型?
stu成員定義時,student_t類型還沒有定義完畢,這時候的struct student_t還不是一個完整的類型。
但是,定義結(jié)構體自身類型的指針是可以的。因為,指針類型的成員變量大小固定,跟結(jié)構體類型是否定義完畢無關。
結(jié)構體成員的存儲struct student_t{
? ? int sn;//4字節(jié)空間
? ? char name[32];//32字節(jié)空間
}stu;
stu變量的存儲:結(jié)構體中每一個成員變量都要占空間,成員變量的名稱就代表了一整塊空間中的某個子塊。
stu.sn=1;
strcpy(stu.name,"hello");//字符串的賦值
結(jié)構體變量的傳參#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é)構體中字符串的賦值
}
int main()
{
struct studen_t stu = { 1, "小明" };
func1(stu);
func2(&stu);
//傳遞空間地址進入函數(shù),不僅可以訪問地址所指向的空間,還可以修改所指向空間的值
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é)構體中字符串的賦值
}
int main()
{
struct studen_t arry[3] = {
{ 1, "張三" },
{ 2, "李四" },
{ 3, "王五" }
};
func(arry);//arry是數(shù)組名,是數(shù)組首元素的地址,傳遞進入?yún)?shù)后,即修改數(shù)組首元素的值
for (int i = 0; i< 3; i++)
{
printf("學號:%2d 姓名:%s\n", arry[i].sn, arry[i].name);
}
system("pause");
return 0;
}
因為結(jié)構體類型占用空間較大,所以結(jié)構體傳參時一般采用 傳址操作(形參是地址,指針大小固定為4/8字節(jié))。
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧