C中的结构

时间:2020-02-23 14:32:07  来源:igfitidea点击:

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-&gt;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