专业编程基础技术教程

网站首页 > 基础教程 正文

C++_结构体指针_嵌套结构体_结构体做为函数参数

ccvgpt 2024-12-30 02:19:05 基础教程 2 ℃

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

C++_结构体指针_嵌套结构体_结构体做为函数参数

?

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

?

然后我们在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了,这样才是修改的,原来的那个结构体的值.

?

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












Tags:

最近发表
标签列表