概述
1.问题描述
学习C/C++等语言的伙伴经常遇到结构体这一词,如下所示表示 日期 的一个结构体:
struct Date{
int year; //年
int month; //月
int day; //日
}a,b,*p; //定义 结构体变量a和b,结构体指针变量p
数据的定义不会感到不好理解,那么唯一的问题就是“调用结构体数据”时应使用:指针运算符(“->”) 还是 点运算符(“.”) ???
特别是当涉及到链式存储的时候常常需要 指针运算符(“->”) 和 点运算符(“.”) 相互配合访问数据,其实这并不复杂,分清楚两种运算符的作用实质,就可以自然的正确运用运算符访问数据。
先看一句话留下印象:“ 访问指针变量元素用 -> 指向,访问结构体变量用 “.”指向 ”。
2.优先级
(1)“.” 是分量运算符,运算级别最高。
(2)“->” 是指向结构体成员运算符,优先级为一级
3.实例分析
(1)“.” 运算符访问结构体成员
------->>>>结构体“变量”用点运算符访问,即“变量名.元素” ,如下代码内容:
#include<stdio.h>
//日期结构体
struct Date{
int year;//年
int month;//月
int day;//日
};
//学生信息结构体
struct student {
int number;//学号 (为简洁理解,在这里只用学号一个数据来表示,当为多个类型数据方法相同)
struct Date birthday; //生日, 在学生结构体中嵌套日期结构体变量birthday
}s;//定义一个学生结构体类型的变量 s
int main(){
s.number=12;//为学生结构体类型的变量 s 中的学号number数据赋值
s.birthday.year=6666;//年
s.birthday.month=77; //月
s.birthday.day=88;//日
//输出信息———使用 “. ”运算符
printf("学生学号:%d,生日:%d---%d---%d",s.number,s.birthday.year,s.birthday.month,s.birthday.day);
return 0;
}
运行结果如下:
在上述实例中,定义日期结构体和学生信息结构体,其中日期结构体嵌套在学生结构体中,定义了学生结构体变量s,因为这是结构体变量,因此访问其元素直接使用“.”运算符即可。
因为日期结构体变量birthday嵌套在student中,对student而言birthday是其一个元素因此用“.”运算符访问。 而birthday中包含year、month、day三个元素,所以birthday用“.”运算符访问即可,综合到一起则为“ s.birthday.year ”形式。
因此,对于 结构体“变量”用点运算符访问,即“变量名.元素” 。
(2)“->” 运算符访问结构体成员
--->>> 结构体“指针变量”访问结构体中成员(元素)用 指针运算符 访问,即“指针名->元素” ,如下代码内容:
#include<stdio.h>
//日期结构体
struct Date{
int year;//年
int month;//月
int day;//日
};
//学生信息结构体
struct student {
int number;//学号 (为简洁理解,在这里只用学号一个数据来表示,当为多个类型数据方法相同)
struct Date birthday; //生日, 在学生结构体中嵌套日期结构体变量birthday
}s,*p=&s;//定义一个学生结构体类型的 变量s 和 指针变量 p,并对p赋值,使p指向s
int main(){
p->number=12;//为学生结构体类型的变量 s 中的学号number数据赋值
p->birthday.year=6666;//年
p->birthday.month=77; //月
p->birthday.day=88;//日
//输出信息———使用 “. ”运算符
printf("学生学号:%d,生日:%d---%d---%d",p->number,p->birthday.year,p->birthday.month,p->birthday.day);
return 0;
}
运行结果如下:
在上述实例中,定义日期结构体和学生信息结构体,其中日期结构体嵌套在学生结构体中,定义了学生结构体变量s和指针变量p并用s的地址初始化指针p,因为p是指针变量,所以通过p访问指针数据时使用 指针运算符(“->”)。
因为日期结构体变量birthday嵌套在student中,对student而言birthday是其一个元素因此用 指针运算符(“->”)访问。 而birthday中包含year、month、day三个元素,所以birthday用“.”运算符访问即可与student不是直接作用关系,综合到一起则为“ p -> birthday . year ”形式。(可以看到涉及到了指针运算符 和 点运算符一起作用于数据。)
因此,对于 结构体“指针变量”用指针运算符访问,即“指针名->元素” 。
4.小结
通过上述实例,主要区分为: 访问指针变量元素用 -> 指向,访问结构体变量用 “.”指向 。
最后
以上就是落后小笼包为你收集整理的C语言结构体--指针运算符(“->”)和点运算符(“.”) 应用区分的全部内容,希望文章能够帮你解决C语言结构体--指针运算符(“->”)和点运算符(“.”) 应用区分所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复