省流:结构体访问成员时,指针用
->,普通变量用.,记住这个原则就不会错
可能在实际编程中遇到这样错误:比如用指针的时候用了点号,导致编译错误。这时候需要指出正确的使用场景,以及两者的区别。
一、具体实例
一个学生结构体,含有名字,学号,成绩元素,通过变量成员,更加具体的展现其用法
#include <stdio.h>
#include <string.h>
// 1. 定义学生结构体
struct Student {
char name[20]; // 名字
int id; // 学号
float score; // 成绩
};
int main() {
// 2. 创建结构体变量(普通变量,用 . 访问成员)
struct Student stu1;
strcpy(stu1.name, "张三"); // 变量直接用 . 赋值
stu1.id = 1001;
stu1.score = 85.5;
// 输出变量成员
printf("【变量操作】\n");
printf("姓名: %s\n学号: %d\n成绩: %.1f\n", stu1.name, stu1.id, stu1.score);
// 3. 创建结构体指针(指针用 -> 访问成员)
struct Student *p = &stu1; // p 指向 stu1 的地址
// 通过指针修改成员值
p->id = 1002; // 指针用 -> 修改成员
strcpy(p->name, "李四");
p->score = 92.0;
// 输出指针修改后的结果
printf("\n【指针操作】\n");
printf("姓名: %s\n学号: %d\n成绩: %.1f\n", p->name, p->id, p->score);
return 0;
}
二、具体区别
p->data:当 p 是结构体指针时使用(如 struct Student *p)
struct Student *p = &stu;
printf("%d", p->data); // 正确!指针用 ->
p.data:当 p 是结构体变量时使用(如 struct Student p)
struct Student p;
printf("%d", p.data); // 正确!变量用 .
三,为什么区分
-
->是(*p).data的简写,专为指针设计。 -
.直接访问变量成员,无需解引用。
1818

被折叠的 条评论
为什么被折叠?



