C语言 结构体是由单个名称表示的不同数据类型的一组变量。让我们举一个例子来理解 C 编程中结构的需要。
让我们说我们需要存储学生的数据,如学生姓名,年龄,地址,身份证等。这样做的一种方法是为每个属性创建一个不同的变量,但是当你需要存储多个学生的数据时,那么例如,您需要为每个学生再次创建这几个变量。以这种方式存储数据非常令人头疼。
我们可以通过使用结构轻松解决这个问题。我们可以创建一个具有name,id,address和age成员的结构,然后我们可以为每个学生创建这个结构的变量。这可能听起来令人困惑,不要担心我们会在示例的帮助下理解这一点。
如何在 C 编程中创建一个结构
我们使用 struct 关键字在 C 中创建结构。struct关键字是结构化数据类型的简短形式。
struct struct_name { DataType member1_name; DataType member2_name; DataType member3_name; …};这里struct_name可以是你选择的任何东西。成员数据类型可以相同或不同。一旦我们声明了结构,我们就可以使用struct name作为数据类型,如int,float等。
首先,我们将看到创建struct变量,访问struct成员等的语法,然后我们将看到一个完整的示例。
如何声明结构的变量?
struct struct_name var_name;
或者:
struct struct_name { DataType member1_name; DataType member2_name; DataType member3_name; …} var_name;如何使用结构变量访问结构的数据成员?
var_name.member1_name;var_name.member2_name;…
如何为结构成员赋值?
有三种方法可以做到这一点。
1)使用点(.)运算符
var_name.memeber_name = value;
2)在一个声明中赋值所有成员
struct struct_name var_name = {value for memeber1, value for memeber2 …so on for all the members}3)指定初始值设定项 – 我们将在本文末尾讨论这个问题。
C 中的结构示例
#include <stdio.h>/* Created a structure here. The name of the structure is * StudentData. */struct StudentData{ char *stu_name; int stu_id; int stu_age;};int main(){ /* student is the variable of structure StudentData*/ struct StudentData student; /*Assigning the values of each struct member here*/ student.stu_name = "Steve"; student.stu_id = 1234; student.stu_age = 30; /* Displaying the values of struct members */ printf("Student Name is: %s", student.stu_name); printf("\nStudent Id is: %d", student.stu_id); printf("\nStudent Age is: %d", student.stu_age); return 0;}输出:
Student Name is: SteveStudent Id is: 1234Student Age is: 30
C 中的嵌套结构:另一个结构中的结构
您可以在另一个结构中使用结构,这是相当可能的。正如我上面所解释的,一旦你声明了一个结构, struct struct_name 就像一个新的数据类型,所以你可以把它包含在另一个结构中,就像其他数据成员的数据类型一样。听起来很混乱?别担心。以下示例将清除您的疑问。
C 编程中嵌套结构的例子
假设我们有两个这样的结构:
结构 1:stu_address
struct stu_address{ int street; char *state; char *city; char *country;}结构 2:stu_data
struct stu_data{ int stu_id; int stu_age; char *stu_name; struct stu_address stuAddress;}正如你在这里看到的那样,我在另一个结构中嵌套了一个结构。
结构内部结构的赋值(嵌套结构)
让我们以上面看到的两个结构为例来理解逻辑
struct stu_data mydata;mydata.stu_id = 1001;mydata.stu_age = 30;mydata.stuAddress.state = "UP"; //Nested struct assignment..
如何访问嵌套结构成员?
使用.运算符链。
假设你想从嵌套结构中单独显示城市:
printf("%s", mydata.stuAddress.city);在结构中使用typedef
typedef使代码简短并提高了可读性。在上面的讨论中,我们已经看到,每次使用结构时我们都必须使用冗长的语法,这会使代码混乱,冗长,复杂且可读性降低。这个问题的简单解决方案是使用typedef。它就像struct的别名。
没有typedef的代码
struct home_address { int local_street; char *town; char *my_city; char *my_country;};...struct home_address var; var.town = "Agra";使用typedef的代码
typedef struct home_address{ int local_street; char *town; char *my_city; char *my_country;}addr;....addr var1;var.town = "Agra";每次需要声明struct变量时,不必使用struct home_address,只需使用addr,即我们定义的typedef。
指定初始值设定项以设置结构成员的值
我们已经学会了两种设置struct成员值的方法,还有另一种方法可以使用指定的初始化器来完成相同的操作。当我们只赋值结构的少数成员时,这很有用。在以下示例中,结构变量s2只有一个赋值的成员。
#include <stdio.h>struct numbers{ int num1, num2;};int main(){ // Assignment using using designated initialization struct numbers s1 = {.num2 = 22, .num1 = 11}; struct numbers s2 = {.num2 = 30}; printf ("num1: %d, num2: %d\n", s1.num1, s1.num2); printf ("num1: %d", s2.num2); return 0;}输出:
num1: 11, num2: 22num1: 30
