之前有学过C#或VB语言的小伙伴对点运算符(.)应该不陌生,即当我们定义了一个结构体时,想要访问结构体里面的成员,我们只要在结构体名称后面加上一个点运算符(.),系统则自动将结构体里面的内容罗列出来,供我们选择引用了。那箭头运算符时干什么用的呢?下面我们通过C++代码展示来比较一下两者的区别。
①、点运算符
创建一个student结构体,如果我们想要对结构体里面成员的属性值进行更改,可以采用点运算符进行直接赋值。
#include <stdio.h> /*引用头文件:输入输出*/
#include<windows.h> /*引用系统头文件:显示屏暂停*/
typedef struct student /*定义一个student类型的结构*/
{
char key; /*结构体内容*/
char name[20];
int age;
}student;
int main()
{
student data; /*定义结构体变量data*/
data.age = 18; /*向结构体变量赋值*/
printf("%d\n", data.age); /*打印结构体变量age内容*/
system("pause"); /*显示屏暂停*/
}
运行效果:
![](https://i-blog.csdnimg.cn/blog_migrate/8986d34a327e9c9f1ebd717cb825cb36.png)
②、箭头运算符
这个运算符我们比较陌生,看到这个我们不禁会问,什么是箭头运算符呢,它的作用是什么?
C语言中的箭头符号为->,这个操作符并非是一个符号,而是由减号(-)和大于号(>)共同组成的。
作用:取结构体指针变量指向的元素值。
这个听起来可能有些抽象,看图:
![](https://i-blog.csdnimg.cn/blog_migrate/76112aea09465e97330a2a82f5259e68.png)
当我们打出箭头运算符时,系统会自动罗列出该指针所指向结构体内的成员。
为了比较两者的区别我们再看一下点运算符的效果:
![](https://i-blog.csdnimg.cn/blog_migrate/2b88d894166fb03f9cbde29f02d2cd74.png)
这样小伙伴们是不是就很清晰两者的区别了呢^_^
点运算符(.)用于结构体变量访问成员。
箭头运算符(->)用于结构体指针变量访问成员。
通过指针读取结构体内容代码:
#include <stdio.h> /*引用头文件:输入输出*/
#include<windows.h> /*引用系统头文件:显示屏暂停*/
typedef struct student /*定义一个student类型的结构*/
{
char name[20]; /*结构体内容*/
int age;
}student;
int main()
{
student data; /*定义结构体变量data*/
struct student *p; /*定义结构体指针变量pdata*/
struct student stu1 = { "Elsa",18 }; /*建立一个结构体stu1并写入成员*/
p = &stu1; /*给指针p赋值,将stu1取址,赋值给指针p*/
printf("%d\n", p->age); /*打印结构体变量age内容*/
system("pause"); /*显示屏暂停*/
}
代码显示结果:
![](https://i-blog.csdnimg.cn/blog_migrate/437e9650854ebd17d210a18ae9af8531.png)
通过指针改变结构体成员内容代码:
#include <stdio.h> /*引用头文件:输入输出*/
#include<windows.h> /*引用系统头文件:显示屏暂停*/
typedef struct student /*定义一个student类型的结构*/
{
char name[20]; /*结构体内容*/
int age;
}student;
int main()
{
student data; /*定义结构体变量data*/
struct student *p; /*定义结构体指针变量pdata*/
struct student stu1 = { "Elsa",18 }; /*建立一个结构体stu1并写入成员*/
p = &stu1; /*给指针p赋值,将stu1取址,赋值给指针p*/
p->age = 20; /*通过指针对结构体中的age元素进行更改*/
printf("%d\n", p->age); /*打印结构体变量age内容*/
system("pause"); /*显示屏暂停*/
}
代码显示结果:
![](https://i-blog.csdnimg.cn/blog_migrate/1d126bcffae2e07946696bac860237bc.png)
拓展:
VS如何创建C++项目
解决C++显示内容闪退问题