C語言數據結構預備知識模塊二:結構體

繼上面的基礎模塊知識之指針之後,我們對數據結構的預備知識——結構體進行記錄學習。

在學習 Java之後,我們對面向對象的編程方法更爲習慣,因爲類Class的出現,讓我們對“萬事萬物皆對象”的理念更爲深刻的理解,這也符合人們的思維習慣,並提高開發代碼的重用性,從而提高開發效率,在C語言中我們發現結構體(struct)和java中的Class有着異曲同工之妙。

1、結構體是一種新的數據結構類型,因爲我們已經知道int、char、float等是基本數據類型。通過封裝基本數據類型來構造結構體,並使用該結構體來定義變量。來實現類似Java中的class的類似數據結構:如下

struct Student
{
	int num;
	char name[20];
	char sex;
	float score;	
}student1,student2……;//這類似於Java中類的實例化對象student1,2

2、也可以在其他函數中通過語句“struct Student student1”來引用該結構體變量。同時,類似地,使用“.”可以訪問結構體的內部屬性。如下:

#include<stdio.h>
struct Student
{
	int num;
	char name[20];
	char sex;
	float score;	
};
int main ()
{
	struct Student s1;//構造實例化結構體變量
	printf("\n請輸入學生的學號:\n");
	scanf("%d",&s1.num);
	printf("\n請輸入學生的姓名:\n");
	scanf("%s",s1.name);
	//清空緩衝區字符
	getchar(); 
	printf("\n請輸入學生的性別:\n");
	scanf("%c",&s1.sex); 
	printf("\n請輸入學生的成績:\n");
	scanf("%f",&s1.score); 
	printf("\n學生信息如下:%d, %s,%c ,%f\n",s1.num,s1.name,s1.sex,s1.score);
	return 0;
}

3.結構體數組,注意以下的數組個數的指定,和不指定數組個數的動態數組,也就是student[]={}空其代碼如下:

#include<stdio.h>
struct Student
{
	int num;
	char name[20];
	char sex;
	float score;	
}stu[5]=
{
{10101,"王明輝",'n',78},
{10102,"王明",'n',78.8},
{10101,"王明輝",'n',78},
{10101,"王明輝",'n',78},
{10101,"王明輝",'n',78}
};
/*也可以不指定數組的數量,而是使用空*/
int main ()
{
	int i;
	for(i = 0;i<5;i++){
	printf("第%d個學生信息:%d,%s,%c,%f\n",i+1,stu[i].num,stu[i].name,stu[i].sex,stu[i].score);
	}
	printf("\n");
	return 0;
}

4.結構體指針。同樣地,結構體也有內存地址,也可以由一個指針變量指向其地址。然後就可以實現通過指針來訪問結構體各成員。如下代碼:

#include<stdio.h>
struct Student
{
	int num;
	char name[20];
	char sex;
	float score;	
};
/*
指針運算符
“->”
例如:
stu.num
*p.num
stu -> num
實際上是等價的。 

*/
int main ()
{
	struct Student s1;
	struct Student *p;
	p= &s1;//指向結構體的指針變量 s 
	
	printf("請輸入學生的學號:\n");
	scanf("%d",&(*p).num);
	printf("請輸入學生的姓名:\n");
	scanf("%s",&(*p).name);
	//清空緩衝區字符
	getchar(); 
	printf("請輸入學生的性別:\n");
	scanf("%c",&(*p).sex); 
	printf("請輸入學生的成績:\n");
	scanf("%f",&(*p).score); 
	printf("學生信息如下:%d, %s,%c ,%f\n",(*p).num,(*p).name,(*p).sex,(*p).score);
	return 0;
}

5.指針運算符“->”可以實現對結構體內對象的訪問,綜合來說,就是:

 stu.num
*p.num

stu -> num

實際上是等價的。 

6.結構體的嵌套

結構體的成員除了基本數據類型之外,還可以是結構體類型。這就是結構體嵌套。以下是上述例子的改寫:

#include<stdio.h>

struct date
{
	int year;
	int month;
	int day;
};

struct Student 
{
	int num;
	char name[20];
	char sex;
	struct date birthday;
	float score;
} s1={10010,"want",'n',{1994,05,15},78.2};
int main()
{
printf("學生信息如下:\n學號:%d \n姓名:%s \n性別:%c \n生日:%d年 %d月 %d日 \n成績:%f",s1.num,s1.name,s1.sex,s1.birthday.year,s1.birthday.month,s1.birthday.day,s1.score);	
 	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章