??前言:
在實際編程過程中,我們可能會希望把一些關(guān)聯(lián)的數(shù)據(jù)存放在一起,這樣方便我們使用。但是這些數(shù)據(jù)的類型有時候并不一致,例如一個學(xué)生的信息:有名字(字符串),有年齡(整數(shù)),性別(字符)······這時候,我們就可以使用自定義類型——結(jié)構(gòu)體類型,將這些類型不一樣的關(guān)聯(lián)數(shù)據(jù)放在一個結(jié)構(gòu)體類型里面。
這篇文章我們來講講結(jié)構(gòu)體類型:
1,結(jié)構(gòu)體的定義
2,結(jié)構(gòu)體變量的創(chuàng)建與初始化
3,結(jié)構(gòu)體成員的引用
??個人簡介:努力學(xué)習(xí)ing
??個人專欄:C語言入門基礎(chǔ)
??CSDN主頁 愚潤求學(xué)
??每日雞湯:未來是怎么來的?未來不是等來的!
結(jié)構(gòu)體類型
一,結(jié)構(gòu)體類型的定義(聲明)
1,一般結(jié)構(gòu)體定義
C語言中結(jié)構(gòu)體類型的定義形式:
struct 結(jié)構(gòu)體名
{
成員項表列
};
//在定義結(jié)構(gòu)體類型的時候,成員不需要初始化;當(dāng)我們創(chuàng)建了變量時,才需要對變量成員初始化
例如我們要定義一個【有名字(字符串),有年齡(整數(shù)),性別(字符)】的結(jié)構(gòu)體類型,名字叫stu:
定義形式如下????
struct stu
{
char name[20];
int age;
char sex;
}
2,組合型結(jié)構(gòu)體定義
比如我們要在上面stu
結(jié)構(gòu)體的基礎(chǔ)上補充一個出生日期(出生日期還要包括:年,月,日)
這個時候,我們就可以多定義一個能夠記錄出生日期的date
結(jié)構(gòu)體類型,然后再在定義學(xué)生結(jié)構(gòu)體類型的時候,引用這個date結(jié)構(gòu)體
具體定義形式如下????
struct date
{
int year;
int month;
int day;
};
struct stu
{
char name[20];
int age;
char sex;
struct date birthday;
};
注意:
在定義組合型的結(jié)構(gòu)體類型時,一定要遵守先定義后使用的原則。
例如:定義上面的stu
結(jié)構(gòu)體時,成員birthday
是一個結(jié)構(gòu)體變量,那我們就要保證birthday
這個結(jié)構(gòu)體變量的結(jié)構(gòu)體類型在之前已經(jīng)先定義過了(在這里也就是date
已經(jīng)先定義了)
二,結(jié)構(gòu)體變量的創(chuàng)建與初始化
1,變量的創(chuàng)建(定義)
(1)先定義結(jié)構(gòu)體類型,在創(chuàng)建結(jié)構(gòu)體變量
struct stu /*定義學(xué)生結(jié)構(gòu)體類型*/
{
char name[20]; /*姓名*/
int age; /*年齡*/
char sex; /*性別*/
};
struct stu s1,s2; /*定義結(jié)構(gòu)體變量*/
利用這種定義形式,可以在程序的任何地方,在先定義后使用的原則下,定義屬于改結(jié)構(gòu)體類型的變量
(2)定義結(jié)構(gòu)體類型,同時創(chuàng)建結(jié)構(gòu)體變量
struct stu /*定義學(xué)生結(jié)構(gòu)體類型*/
{
char name[20]; /*姓名*/
int age; /*年齡*/
char sex; /*性別*/
}s1,s2; /*同時定義結(jié)構(gòu)體變量*/
將變量直接定義在結(jié)構(gòu)體類型的后面,采用這樣的定義方式,在書寫上比較緊湊。但對要多處定義結(jié)構(gòu)體變量不方便
(3)通過定義無名結(jié)構(gòu)體類型來定義結(jié)構(gòu)體變量
struct /*無結(jié)構(gòu)體名*/
{
char name[20];
int age;
char sex;
}s1,s2; /*同時定義結(jié)構(gòu)體變量*/
但是,由于該定義方式無法記錄該結(jié)構(gòu)體的類型,所以,這種定義形式除了直接定義變量外,不能再定義該結(jié)構(gòu)體的其他變量。(這樣的定義,使程序的擴(kuò)展性受到很大限制,所以建議少用這種方式定義結(jié)構(gòu)體變量)
2,變量的初始化
struct stu
{
char name[20];
int age;
char sex; //我們用B表示男,用G表示女
};
假如我們要創(chuàng)建兩個上面這種結(jié)構(gòu)體類型的變量,并初始化:
(1)按照結(jié)構(gòu)體順序初始化
struct stu s1 = {"zhangsan",20,'B'};
struct stu s2 = {"wangwu",18,'G'};
(2)按照指定的順序初始化
其實也就是用到了對結(jié)構(gòu)體成員的引用
struct stu s1 = {.age = 20, .name = "zhangsan", .sex = 'B'};
struct stu s2 = {.age = 18, .name = "wangwu", .sex = 'G'};
當(dāng)然,在定義結(jié)構(gòu)體類型的同時,創(chuàng)建的結(jié)構(gòu)體變量,也可以同時初始化
struct stu
{
char name[20];
int age;
char sex;
}s1 = {"zhangsan",20,'B'};
三,結(jié)構(gòu)體成員的引用
對結(jié)構(gòu)體成員的引用我們需要使用到運算符“.”
使用格式:
結(jié)構(gòu)體類型變量名.成員名
如:s1.age
每使用一次.
運算符,其實就是撥開了一層。
賦值時,我們需要找到最內(nèi)層的(能賦值的)成員
例如????
#include<stdio.h>
struct date
{
int year;
int month;
int day;
};
struct stu
{
char name[20];
int age;
char sex;
struct date birthday;
};
int main()
{
struct stu s1 = { "zhangsan",20,'B',{2005,1,1} };
printf("%d\n", s1.age);
printf("%d\n", s1.birthday.day);
}
這個程序里的結(jié)構(gòu)體類型stu是內(nèi)包含一個結(jié)構(gòu)體成員birthday的,所以當(dāng)我們要引用birthday里面的成員時,我們就需要再用一次.
運算符:s1.birthday.day
運行結(jié)果:
文章來源:http://www.zghlxwxcb.cn/news/detail-777455.html
??我的分享也就到此結(jié)束啦??
要是我的分享也能對你的學(xué)習(xí)起到幫助,那簡直是太酷啦!
若有不足,還請大家多多指正,我們一起學(xué)習(xí)交流!
??公主,王子:點贊??→收藏?→關(guān)注??
感謝大家的觀看和支持!祝大家都能得償所愿,天天開心?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-777455.html
到了這里,關(guān)于C語言——結(jié)構(gòu)體類型(一)【結(jié)構(gòu)體定義,創(chuàng)建,初始化和引用】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!