结构体,结构体指针作为函数参数的应用笔记
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. 我以前以为,可以把结构体名字(实际上必须取它的地址)直接赋值给结构体指针,可能是字符串搞多了吧。
分类:
java安卓
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App