C中的结构
C语言的结构基本上是用户定义的数据类型,使用户能够创建一个数据类型,该数据类型可以将不同数据类型的元素分组到其中。
因此,它包含由单个结构名称表示的不同数据类型。
用C创建结构
C语言使用关键字" struct"创建结构。
语法:
struct Structure_Name { Datatype data_member1; Datatype data_member2; . . Datatype data_memberN; };
如上所述,C语言使用struct关键字来构建结构。
在大括号内,用户可以定义实现特定程序目的所需的数据成员。
这些数据成员是不同数据类型(例如int,float,double,char等)的基本C语言变量。
必须在特定结构的右花括号后添加分号(;)。
例:
struct Student_info { char name[100]; char address[100]; char division[50]; int roll_num; };
在上面的代码片段中,我们创建了一个名为Student_info的结构来满足学生信息的目的。
在结构中,我们声明了数据成员:名称,地址,分区和roll_num及其特定的数据类型。
声明结构变量
使用结构变量,用户可以访问在结构内部声明的数据成员。
可以使用以下任何一种方法在C中声明结构变量:
- 在结构定义之后声明结构变量
- 结构变量的声明以及结构定义
1.在结构定义之后声明结构变量
语法:
struct Structure_Name { Datatype data_member1; Datatype data_member2; . . Datatype data_memberN; }; struct Structure_Name Variable1, Variable2,.., VariableN;
例:
struct Student_info { char name[100]; char address[100]; char division[50]; int roll_num; }; struct Student_info S1, S2;
在上面的代码片段中,我们在结构声明后为结构Student_info创建了结构变量S1和S2。
2.结构变量的声明以及结构定义
语法:
struct Structure_Name { Datatype data_member1; Datatype data_member2; . . Datatype data_memberN; } Structure_variable1, Structure_variable2;
例:
struct Student_info { char name[100]; char address[100]; char division[50]; int roll_num; }S1, S2;
在上面的代码中,我们创建了结构变量S1和S2以及结构Student_info的声明。
初始化结构数据成员
声明它们时,不能初始化C结构数据成员。
在声明结构的数据成员之后,需要为它们分别分配值。
示例:在声明结构数据成员的同时声明它们会产生错误
struct Student_info { char *name = "Safa"; //This statement gives compilation error };
如上所述,在声明之后,需要分别初始化Structure数据成员。
语法:
Structure_Name.Structure_data_member_name = Value
访问结构中的数据成员
C使用句点或者成员访问运算符(。
)来访问结构的数据成员。
语法:
Structure_variable_name.Structure_data_member_name
例:
#include <stdio.h> struct Student_info { char *name; char *address; char *division; int roll_num; }; int main() { struct Student_info S1; S1.name = "Safa Mulani"; S1.address = "Pune"; S1.division = "A"; S1.roll_num = 24105; printf("The Student Information is as follows:\n"); printf("\nName: %s", S1.name); printf("\nAddress: %s", S1.address); printf("\nDivision: %s", S1.division); printf("\nRoll Number: %d", S1.roll_num); return 0; }
其中我们创建了类型为struct的变量S1。
此外,我们已经使用S1访问了结构变量:名称,地址,分区和roll_num。
输出:
The Student Information is as follows: Name: Safa Mulani Address: Pune Division: A Roll Number: 24105
结构数组
C允许用户使用数组来表示结构的数据元素。
语法:
struct Structure_Name array_name[size];
在下面的代码段中,我们创建了大小为3的结构Student_info的数组" S"。
例:
#include<stdio.h> struct Student_info { char name[100]; char division[50]; int roll_num; }; void main() { struct Student_info S[3]; for(int i = 0; i < 3; i++) { printf("\nEnter Student Details:\n"); printf("\nName:\t"); scanf("%s", S[i].name); printf("\nDivision:\t"); scanf("%s", S[i].division); printf("\nRoll Number:\t"); scanf("%d", &S[i].roll_num); } printf("\nStudent Information:\n"); for(int i = 0; i < 3; i++) { printf("\nName: %s", S[i].name); printf("\nRoll Number: %d", S[i].roll_num); printf("\nDivision: %s", S[i].division); } }
输出:
Enter Student Details: Name: Safa Division: A Roll Number: 23105 Enter Student Details: Name: Aman Division: B Roll Number:21042 Enter Student Details: Name: Divya Division: D Roll Number: 2134 Student Information: Name: Safa Roll Number: 23105 Division: A Name: Aman Roll Number: 21042 Division: B Name: Divya Roll Number: 2134 Division: D
结构作为功能参数
C使程序员可以将结构作为参数传递给函数,方式类似于将变量/数组作为函数传递给参数。
例:
#include <stdio.h> struct Evaluation { char name[50]; int score; }; void display_details(struct Evaluation e1); int main() { struct Evaluation e; printf("Name: "); scanf("%[^\n]%*c", e.name); printf("Score: "); scanf("%d", &e.score); display_details(e); //passing structure as an argument return 0; } void display_details(struct Evaluation e1) { printf("\nEvaluation details.....\n"); printf("Name: %s", e1.name); printf("\nScore: %d", e1.score); }
输出:
Name: Safa Score: 56 Evaluation details..... Name: Safa Score: 56
嵌套结构
C中的嵌套结构基本上将一种结构定义为另一种结构,即它允许一个结构具有另一种结构作为变量。
例:
struct Student_info { char *name; char *Branch_name; struct Evaluation { char *division; int hsc_score; int ssc_score; int roll_num; }eval; }student;
在上面的代码段中,我们创建了一个Student_info结构,其中我们代表了另一个结构Evaluation作为它的成员。
您可以使用struct1_var.struct2_var.struct2_innervar访问嵌套结构
例如,在上面的示例中,我们使用Student作为结构1变量,并使用eval来嵌套结构。
我们可以访问内部变量为student.eval.ssc_score;。
结构指针
C允许我们有一个指向结构的指针。
箭头(->)运算符使用户可以访问具有指向它的指针的结构的数据成员。
语法:
struct Structure_Name { Datatype data_member1; Datatype data_member2; . . Datatype data_memberN; }; int main() { struct Structure_Name *pointer_name; }
例:
#include<stdio.h> struct Student_info { char *name; int roll_num; }; int main() { struct Student_info *St, S; St = &S; printf("\nEnter Student Details:\n"); printf("\nName:\t"); scanf("%s", St->name); printf("\nRoll Number:\t"); scanf("%d", &St->roll_num); printf("\nStudent Information:\n"); printf("\nName: %s", St->name); printf("\nRoll Number: %d", St->roll_num); return 0; }
输出:
Enter Student Details: Name: Safa Roll Number: 1234 Student Information: Name: Safa Roll Number: 1234