结构体,结构体指针作为函数参数的应用笔记


1. 结构体,结构体指针作为函数参数有何区别

#include <stdio.h> #include <string.h>

struct animal { char name[30]; int num; }; //使用结构体作为参数 浪费内存 需要建立结构体
void change_struct(struct animal cat) { cat.num = 17; } //函数内部改变需要地址 所以需要指针保存
void change_point(struct animal *cat) { cat->num   = 13; // (*cat).num = 1000;//*根据地址取出内容
} void main { struct animal cat = {0}; struct animal *pcat = &cat; cat.num = 20; change_struct(cat); printf("%d",cat.num); //输出20 change_point(pcat); printf("%d",cat.num); //输出13 cat.num = 28; change_point(&cat); //输出13 printf("%d",cat.num); }

2. 综上所述,就是传递结构体指针(或者取它的地址)的话,可以修改结构体里面的值。传递结构体的话,不能修改结构体变量的值。

3. 其中如果传递的是结构体的话,因为C语言的参数传递值调用方式是要求把参数的一份拷贝传递给参数,上面的name这个数组的长度是30,那么这个结构体将占用34个字节的空间,要想把它作为参数传递的,我们必须把34个字节都复制到堆栈中,以后再丢弃。所以传递指针的效率要高非常多。

4. 我以前以为,可以把结构体名字(实际上必须取它的地址)直接赋值给结构体指针,可能是字符串搞多了吧。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM