结构体指针形参使用方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结构体指针形参使用方法
我跟你说啊,结构体指针形参这玩意儿,我一开始真的是瞎摸索。
那时候我就知道结构体这东西挺有用的,能把相关的数据都放在一起。
可一涉及到结构体指针形参,我就懵了。
我试过直接传结构体,但是后来发现不太对。
比如说,我写了个函数来处理结构体里的数据,要是直接传结构体,每次函数调用的时候就会把整个结构体的数据都复制一份。
这就好比你要把一整套工具从一个地方搬到另一个地方,每次都搬整套就太麻烦了。
然后我就开始尝试结构体指针形参。
我一开始搞不清楚怎么在函数里用这个指针去访问结构体里的数据。
我就这么乱试,最开始我以为像普通指针那样用就好了,结果错得一塌糊涂。
后来我才明白,你得先确保这个指针指向的结构体是有意义的,就好比你要去一个房子拿东西,你得先找对房子。
就拿一个简单的例子来说,我定义了一个结构体来表示学生的信息,里面有名字和年龄。
//定义结构体
struct student {
char name[20];
int age;
};
当我用函数来修改学生的年龄时,如果用结构体指针形参,函数定义大概就是这样的:
void changeAge(struct student stu) {
//这里我一开始忘了加
//写成stu->age = 20; 实际上应该是(stu).age = 20;
(stu).age = 20;
}
要是像我之前那样写错的话,编译可能都过不了。
这里就是我容易犯错的地方。
还有就是在函数调用的时候,要注意传的是结构体的地址。
像这样:
struct student stu = {"Tom", 18};
changeAge(&stu);
通过这个例子我就渐渐明白了。
我还想到,要是这个指针是空指针,那也会出大问题呢。
所以在函数里,最好先判断一下指针是不是空指针。
这就像是你要进一个房子,得先看看这房子是不是存在。
我在处理结构体指针形参的时候还遇到过数据修改在函数里做了,但是外面却没生效的情况。
后来才知道,原来是我没有理解指针赋值和值传递的差别。
这就好比你以为你在别人房子里改了东西,结果只是改了个副本,原房子一点没变。
这就是我在结构体指针形参使用方法上的一些经验和经历,希望对你有点帮助。
不过我也不敢说我全部都精通了,我还在不断学习呢。
我总觉得多做一些实际的例子,多错几次,然后慢慢就真的会用了。