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

