結(jié)構(gòu)體詳解
結(jié)構(gòu)體基本用法:
結(jié)構(gòu)體就是把相同或者不同類型的便利放到一起,這和C++中的類很像,但沒有c++那么復(fù)雜,C語言中的結(jié)構(gòu)體申明如下:
struct student //結(jié)構(gòu)體名
{
char name[10]; //姓名
int number; //編號
int grade; //成績
};
申明很簡單,其內(nèi)存是按順序放置的。
下面需要注意的幾點(diǎn):
1.申明時不能初始化(為什么后面會講)
2.申明只是申明一個結(jié)構(gòu)體,是不能使用的
3.獲取結(jié)構(gòu)體大小可以用sizeof(struct student)
4.結(jié)構(gòu)體可以嵌套定義
5.結(jié)構(gòu)體大小必須是所有成員變量大小的整數(shù)倍
一般我們會使用新定義類型來代替結(jié)構(gòu)體,其實(shí)就是給結(jié)構(gòu)體起一個新的名字
typedef struct student
{
char name[10];
int number;
int grade;
}STU;
STU stu1={"張三",001,95};//定義一個stu1結(jié)構(gòu)體變量,并進(jìn)行初始化
注意:只有在定義的時候才能一起初始化,一旦定義了之后,不能一起初始化,但是可以分別初始化,為啥之后不能初始化,主要原因是因?yàn)榻Y(jié)構(gòu)體變量是按順序存儲的。
這樣STU表示的實(shí)際就是結(jié)構(gòu)體,具體可以參考typedef用法。
結(jié)構(gòu)體既然申明了那怎么使用了,這里我們必須定義一個結(jié)構(gòu)體變量,注意是結(jié)構(gòu)體變量,也就是定義一個變量,這里的變量的類型是結(jié)構(gòu)體,因此結(jié)構(gòu)體申明部分其實(shí)就是申明一個新的變量類型,因此結(jié)構(gòu)體是一個類型,不是變量,所以這也就是為啥申明的時候里面不能進(jìn)行初始化的原因。 下面舉個例子來使用結(jié)構(gòu)體:
我們引用結(jié)構(gòu)體是可以這樣引用:
stu1.name="李四";
stu1.number=002;
stu1.grade=100;
上面的引用方式是成員引用,也就是普通變量方式引用,還有一種引用就是結(jié)構(gòu)體指針引用,這兩種引用的方式有很大不同,后面會講到。
指針引用時必須申明一個結(jié)構(gòu)體指針,就像在整型變量中使用指針一樣,我們需要先定義一個整型指針變量,然后使用它,這里也是一樣。
STU *stu2; //定義一個stu2結(jié)構(gòu)體指針變量
上面不能進(jìn)行初始化,因?yàn)槠鋵?shí)質(zhì)是一個指針,不能像變量一樣可以一起初始化(當(dāng)然,指針實(shí)質(zhì)還是變量,但是其使用不一樣,所以一般說指針還是指指針變量)
既然是指針,那么必須指向一個內(nèi)存地址,因此指針變量使用之前必須指向一塊特定的內(nèi)存地址,結(jié)構(gòu)體指針也不例外。 那我們怎樣初始化結(jié)構(gòu)體指針呢
第一種方式用動態(tài)分配內(nèi)存的方式:
stu2=(STU*)malloc(STU);
第二種方式使用結(jié)構(gòu)體變量間接方式:
stu2=&stu1;
這樣結(jié)構(gòu)體stu2指向的就是stu1的首地址。
結(jié)構(gòu)體高級用法:
在函數(shù)中,如果參數(shù)是結(jié)構(gòu)體,那么又該怎樣使用呢,其實(shí)我們使用結(jié)構(gòu)體和使用變量是一樣的,定義如下
void swap(STU stu1,STU stu2)
{
int exchange=0;
exchange = stu1.grade;
stu1.grade=stu2.grade;
stu2.grade=exchange;
/******
......
******/
}
這樣就可以使用結(jié)構(gòu)體變量了,但是請思考下面代碼結(jié)果:
STU stu3={"王五",003,80};
swap(stu1,stu3);
執(zhí)行這個函數(shù)兩個結(jié)構(gòu)體中的grade會交換么? 結(jié)果是不會。 這里就和函數(shù)中講解的是一樣的,那么我們怎么才能將其交換呢,在普通函數(shù)中給的方法是使用指針,因此這里我們同樣可以使用指針來操作,我們必須將函數(shù)的形參定義為結(jié)構(gòu)體指針變量。 如下:
STU swap(STU *stu1,STU *stu2)
{
int exchange=0;
exchange = stu1->grade;
stu1->grade=stu2->grade;
stu2->grade=exchange;
}
這樣我們使用
swap(&stu1,&stu3);
就可以將其調(diào)換位置了
-
C語言
+關(guān)注
關(guān)注
180文章
7575瀏覽量
134048 -
C++
+關(guān)注
關(guān)注
21文章
2085瀏覽量
73301 -
變量
+關(guān)注
關(guān)注
0文章
607瀏覽量
28257 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
127瀏覽量
10800
發(fā)布評論請先 登錄
相關(guān)推薦
評論