在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语言中的运用有更深入的了解。