指针与函数

本文深入探讨了函数间传值和传址的区别,通过具体示例解释了两者的生命周期和作用域。并介绍了如何利用指针进行结构体的快速传递,避免了额外的内存开销。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

 

上述图片,表达了传值和传址的两种方式。但是这不是重点,重点是他们的过程和关系。

函数之间可以进行直接传值,但是过程又是怎么样的呢。

顺着代码下来,遇到a函数,进入a函数,在进入之前,函数a中克隆一个与aa相同的值的变量a,然后把1赋值给a。但是这个克隆变量a它的声明周期只存在于函数a。当退出函数a的时候,克隆变量a被销毁,主函数中的变量aa没有受到丝毫影响,因此输出的还是0.

 

同理进入函数b的时候,克隆的一个存有指向aa的指针变量b,虽然它的生命周期也是在函数b内。但是b存有aa的地址。我们可以把aa的源地址与克隆地址当作指向同一地方的两个指针。通过取值符 * 对变量a操作,就算出了函数b之后,变量b会被销毁,但是主函数中的变量已经被改变了。而不是像传值一样简单的在克隆变量上操作。

传值和传址就到这里,下面还有更好玩的东西

 1 #include <stdio.h>
 2 
 3 typedef struct time{
 4     int year;
 5     int month;
 6     int day;
 7 }T;
 8 
 9 struct time* a(T *today);
10 void b(T today);
11 
12 int main(void){
13 
14     T today = {today.year=2018,today.month=7,10};
15     a(&today);
16     b(*a(&today));
17 
18     return 0;
19 }
20 
21 struct time* a(T *today){
22     return today;
23 }
24 
25 void b(T today){
26     printf("%d %d %d\n",today.year,today.month,today.day);
27 }

 

函数之间的间接访问只能通过指针,在a函数中,把结构体指针类型作为函数的返回类型,这样做的好处是,可以在其他函数内做参数,进行快速的传递,而且传的是指针。没有指针的话,就得先在函数里面声明一个性质一样的变量,然后再通过函数赋值给主函数的变量,多麻烦啊,且浪费内存,消耗太大了。这样我们需要传递结构体就会轻松很多。

 

转载于:https://www.cnblogs.com/Fsiswo/p/9290435.html

Windows 系统修复工具主要用于解决 Windows 11/10 系统中的各种常见问题,具有操作简单、功能全面等特点: 文件资源管理器修复:可解决文件资源管理器卡死、崩溃、无响应等问题,能终止崩溃循环。还可修复右键菜单无响应或选项缺失问题,以及重建缩略图缓存,让图片、视频等文件的缩略图正常显示,此外,还能处理桌面缺少回收站图标、回收站损坏等问题。 互联网和连接修复:能够刷新 DNS 缓存,加速网页加载速度,减少访问延迟。可重置 TCP/IP 协议栈,增强网络连接稳定性,减少网络掉线情况,还能还原 Hosts 文件,清除恶意程序对网络设置的篡改,保障网络安全,解决电脑重装系统后网络无法连接、浏览器主页被篡改等问题。 系统修复:集成系统文件检查器(SFC),可自动扫描并修复受损的系统文件。能解决 Windows 激活状态异常的问题,还可重建 DLL 注册库,恢复应用程序兼容性,解决部分软件无法正常运行的问题,同时也能处理如 Windows 沙箱无法启动、Windows 将 JPG 或 JPEG 保存为 JFIF 等系统问题。 系统工具维护:提供启动管理器、服务管理器和进程管理器等工具,用户可控制和管理启动程序、系统服务和当前运行的进程,提高系统的启动和运行速度,防止不必要的程序和服务占用系统资源。还能查看系统规格,如处理器线程数、最大显示分辨率等。 故障排除:集成超过 20 个微软官方诊断工具,可对系统问题进行专业排查,还能生成硬件健康状态报告。能解决搜索和索引故障、邮件和日历应用程序崩溃、设置应用程序无法启动等问题,也可处理打印机、网络适配器、Windows 更新等相关故障。 其他修复功能:可以重置组策略设置、catroot2 文件夹、记事本等多种系统设置和组件,如重置 Windows 应用商店缓存、Windows 防火墙设置等。还能添加重建图标缓存支持,恢复粘滞便笺删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值