由一個或多個基礎類型組合出來的一個新的復合類型。
創新互聯公司專注于月湖網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供月湖營銷型網站建設,月湖網站制作、月湖網頁設計、月湖網站官網定制、小程序制作服務,打造月湖網絡公司原創品牌,更為您提供月湖網站排名全網營銷落地服務。結構體類型的聲明struct student_t{
int sn;
char name[32];
int age;
};
結構體變量的定義struct student_t stu;
結構體可以在全局聲明,也可以在某個函數內部進行聲明,但是局部聲明的類型除了作用域就無法被訪問。可以在聲明結構體的同時定義變量。
typedef的作用類型定義,基于一個原始的類型 ,定義出一個新的類型。
基于struct student_t類型定義了一個新的類型Student,此時的Student是一個類型。
typedef常用于復雜數據類型的類型定義,可以大大簡化結構體類型名的使用。
結構體數組的定義與使用#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;
}
結構體的嵌套定義#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", "班級名稱","班級數量");
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;
}
結構體類型的嵌套定義與使用
結構體類型的成員自引用結構體類型成員的類型是否可以是結構體自身類型?
stu成員定義時,student_t類型還沒有定義完畢,這時候的struct student_t還不是一個完整的類型。
但是,定義結構體自身類型的指針是可以的。因為,指針類型的成員變量大小固定,跟結構體類型是否定義完畢無關。
結構體成員的存儲struct student_t{
? ? int sn;//4字節空間
? ? char name[32];//32字節空間
}stu;
stu變量的存儲:結構體中每一個成員變量都要占空間,成員變量的名稱就代表了一整塊空間中的某個子塊。
stu.sn=1;
strcpy(stu.name,"hello");//字符串的賦值
結構體變量的傳參#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, "小紅");//結構體中字符串的賦值
}
int main()
{
struct studen_t stu = { 1, "小明" };
func1(stu);
func2(&stu);
//傳遞空間地址進入函數,不僅可以訪問地址所指向的空間,還可以修改所指向空間的值
func1(stu);
system("pause");
return 0;
}
數組傳參:
#include#include#includestruct studen_t{
int sn;
char name[32];
};
void func(struct studen_t *pstu)
{
pstu->sn = 21;
strcpy(pstu->name, "小紅");//結構體中字符串的賦值
}
int main()
{
struct studen_t arry[3] = {
{ 1, "張三" },
{ 2, "李四" },
{ 3, "王五" }
};
func(arry);//arry是數組名,是數組首元素的地址,傳遞進入參數后,即修改數組首元素的值
for (int i = 0; i< 3; i++)
{
printf("學號:%2d 姓名:%s\n", arry[i].sn, arry[i].name);
}
system("pause");
return 0;
}
因為結構體類型占用空間較大,所以結構體傳參時一般采用 傳址操作(形參是地址,指針大小固定為4/8字節)。
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
本文題目:C語言-結構體-創新互聯
網址分享:http://m.newbst.com/article32/dsojpc.html
成都網站建設公司_創新互聯,為您提供面包屑導航、網站建設、全網營銷推廣、網站導航、網頁設計公司、營銷型網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯