

然后我们来看结构体指针.


可以看到我们先去定义一个结构体


然后我们在main函数中,去声明一个结构体
s
然后我们定义一个指针
int *p = &s;
指向这个结构体变量.


这里要注意,我们说,对于int a=3;
我们定义 int * p =&a;
这样是可以的,但是对于结构体来说,定义指针的时候,也需要指定类型是结构体
struct student * p =&s;
这样来定义一个结构体的指针.


可以看到我们定义了一个*p 这个student的结构体的指针.


然后我们再通过,这个结构体指针把这个结构体的值,打印出来
p->name 等等,注意,结构体在c++中取值,是通过-> 这样的写法.


注意因为name是string类型的,所以这里要引入
#include <string>


然后执行一下看看结果,已经可以通过指针获取结构体的内容了.




然后我们再去看一下,结构体的嵌套


我们要在老师结构体中,嵌套一个学生结构体


可以看到,上面我们定义一个老师结构体
老师结构体中定义一个stu,学生结构体


但是要注意,我们的学生结构体,定义的时候一定要定义到
老师结构体的上面,因为要先定义才能使用.


可以看到定义好学生结构体以后,就不报错了.


然后我们在main方法中,创建一个老师的结构体,然后赋值.


然后我们打印出来结构体的内容去看看


可以看到碰到string,需要
#include <string>




上面是结构体嵌套的内容.


然后我们再来看,结构体做函数的参数怎么用.


我们要做一个学生结构体,然后将这个学生结构体,传入到一个参数,然后打印这个学生的信息.


可以看到上面是定义的学生的结构体.


然后我们上面定义了一个结构体变量,在main方法中


用到了string导入string包


然后执行打印看看


然后我们写一个方法,来打印
比如这个printStudent1,首先我们直接把s这个结构体传进去,而不是将s这个结构体的地址
这种传递方式,叫做值传递.




可以看到,我们的参数
struct student s
直接就是一个结构体.


然后我们,把s这个结构体传入,


可以看到结构体中打印出来的内容.


然后我们再去看看地址传递.


我们把结构体的,地址做为参数传入到方法中去
&s


可以看到,printStudent2
这个是,struct student *p 传入的是结构体的指针
然后利用p-> 箭头符号,来获取结构体指针,对应的值.


然后传入这个&s 把结构体地址传入进去.


然后看看结果


.
这里注意,如果我们传递的是值,我们在这个打印的方法中,修改,结构体,age的值为100




然后打印,可以看到,这值,仅仅是在方法内部被修改了,因为是值传递,修改的,是传递过去的,新建的那个结构体的值,也就是传递的时候是把结构体,又创建了一个然后在这个方法内部,
赋值的时候是给这个新的结构体赋值,而
不是我传递过去的那个结构体的值.


然后我们在地址传递这个方法中,修改一下
p->age 的值是200;
可以看到


这样,打印出来,虽然是在方法内部修改的
age的值,在外面打印出来也是200了,这样才是修改的,原来的那个结构体的值.


这个需要注意,这个就是地址传递和值传递的区别.