C语言中结构体的运用

2023-02-27 15:45:01 浏览数 (1)

在C语言中,"."号和"->"号是用来访问结构体中成员的运算符。

"."号

"."号用来访问结构体中的成员变量。当结构体变量在内存中连续存储时,使用"."号访问结构体中的成员变量。

代码语言:javascript复制
struct Student {
    int age;
    char name[20];
    float score;
};

int main() {
    struct Student stu;
    stu.age = 20;
    strcpy(stu.name, "Mike");
    stu.score = 89.5;
    return 0;
}

"号">"->"号

"->"号用来访问结构体中的成员变量,当结构体变量存储在指针变量中时,使用"->"号访问结构体中的成员变量。

代码语言:javascript复制
struct Student {
    int age;
    char name[20];
    float score;
};

int main() {
    struct Student stu;
    struct Student *pstu = &stu;
    pstu->age = 20;
    strcpy(pstu->name, "Mike");
    pstu->score = 89.5;
    return 0;
}

比较

在上面的两个例子中,我们可以看出 "." 号和 "->" 号的主要区别就在于它们访问结构体成员变量的方式不同。 "." 号在结构体变量在内存中连续存储时使用,而 "->" 号在结构体变量存储在指针变量中时使用。

结构体数组

在 C 语言中,结构体数组是可以被定义的,它是由多个结构体变量组成的数组。

在访问结构体数组中的成员变量时,我们可以使用 "." 号或 "->" 号。

例如,定义了一个名为 "students" 的结构体数组,其中包含了 5 个 "Student" 结构体变量,那么可以使用如下方式访问数组中第 3 个元素的 age 成员变量:

代码语言:javascript复制
struct Student {
    int age;
    char name[20];
    float score;
};

int main() {
    struct Student students[5];
    students[2].age = 20;
    strcpy(students[2].name, "Mike");
    students[2].score = 89.5;
    return 0;
}

或者使用指针变量访问

代码语言:javascript复制
struct Student {
    int age;
    char name[20];
    float score;
};

int main() {
    struct Student students[5];
    struct Student *pstu = &students[2];
    pstu->age = 20;
    strcpy(pstu->name, "Mike");
    pstu->score = 89.5;
    return 0;
}

通过这些例子我们可以看出,在访问结构体数组中的成员变量时,我们可以使用 "." 号或 "->" 号,两者在语法上等价。但是在代码中应该根据实际情况来选择使用哪种运算符,以保证代码的正确性和可读性。

结构体的嵌套定义

在 C 语言中,结构体可以嵌套定义,即一个结构体可以包含另一个结构体的成员变量。

例如,定义了一个名为 "Person" 的结构体,其中包含了 "Address" 结构体的成员变量,那么可以使用如下方式访问 Person 结构体中 Address 结构体的 city 成员变量:

代码语言:javascript复制
struct Point {
    int x;
    int y;
};

struct Rectangle {
    struct Point topLeft;
    struct Point bottomRight;
};

int main() {
    struct Rectangle rect;
    rect.topLeft.x = 0;
    rect.topLeft.y = 0;
    rect.bottomRight.x = 10;
    rect.bottomRight.y = 10;

    // 使用连续的 "." 号访问成员变量
    printf("Top left point: (%d, %d)n", rect.topLeft.x, rect.topLeft.y);
    printf("Bottom right point: (%d, %d)n", rect.bottomRight.x, rect.bottomRight.y);

    // 使用指针变量访问成员变量
    struct Rectangle *prect = ▭
    printf("Top left point: (%d, %d)n", prect->topLeft.x, prect->topLeft.y);
    printf("Bottom right point: (%d, %d)n", prect->bottomRight.x, prect->bottomRight.y);

    return 0;
}

上面的例子中,我们定义了两个结构体 Point 和 Rectangle。Point 结构体中包含了 x 和 y 成员变量,而 Rectangle 结构体中包含了两个 Point 结构体的成员变量 topLeft 和 bottomRight。

我们可以使用连续的 "." 号来访问嵌套结构体中的成员变量,比如 rect.topLeft.x 和 rect.bottomRight.y。

也可以使用指针变量访问嵌套结构体中的成员变量,比如 prect->topLeft.x 和 prect->bottomRight.y。

从上面的例子可以看出,嵌套结构体在 C 语言中的应用非常灵活,可以使用 "." 和 "->" 号来访问嵌套结构体中的成员变量。

总结:

C语言中结构体是一种重要的数据类型,可以用来组织复杂的数据结构。通过结构体,我们可以将相关的数据项组织在一起,方便程序访问和维护。 在访问结构体成员时,可以使用 "." 号或者是 "->"号,其中 "."号只能用于非指针变量,而 "->"号只能用于指针变量。这两个符号都可以连续使用,来访问嵌套结构体中的成员变量。

希望这篇文章能帮助大家对结构体在C语言中的运用有更深入的了解。

0 人点赞