我是靠谱客的博主 落后小笼包,最近开发中收集的这篇文章主要介绍C语言结构体--指针运算符(“->”)和点运算符(“.”) 应用区分,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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语言结构体--指针运算符(“->”)和点运算符(“.”) 应用区分所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部