调用函数时,到底什么时候要用指针接收,看完就不难理解了(Swap交换函数为例)

您所在的位置:网站首页 c语言函数参数的传递是什么 调用函数时,到底什么时候要用指针接收,看完就不难理解了(Swap交换函数为例)

调用函数时,到底什么时候要用指针接收,看完就不难理解了(Swap交换函数为例)

2024-07-12 03:06:48| 来源: 网络整理| 查看: 265

在这里我通过讲解一个交换函数来讲解一下什么时候传参需要用指针接收。

 

这里先看一段代码,很多初学者对指针掌握不够,经常会写出这样的代码:

#define _CRT_SECURE_NO_WARNINGS 1 #include #include void Swap(int x, int y) { int tmp = x; x = y; y = tmp; } int main() { int a = 10; int b = 20; Swap(a,b); printf("a=%d b=%d\n", a, b); system("pause"); return 0; }

 这样的代码调试也没有问题,逻辑就是将a,b传入Swap函数,Swap函数就是实现交换功能的,但当我们运行会发现a,b的值并没有交换,如图:

这是为什么呢?我们会发现我们的交换函数写的并没有问题,可是为什么不能完成交换?这里就我们就需要自己调试程序了,按F10 开始调试程序,这里附上调试部分截屏:

刚开始调试,主函数刚开始,未执行时a,b值分别为5241300 5241280,按F10往下逐过程调试 

 

 执行完12,13行的赋值语句,我们发现a,b的值已经变为赋值的10和20,这时来到Swap函数,进入函数之前,我们在监视框中添加&a和&b,对a,b的地址进行监视,得到a,b的地址分别为0x00effbf8,0x00effbec;

此时来到了Swap函数,按F11进入函数内部,这时在下面监视框里加上x,y,我们会发现a,b的值已经传给了x和y,这里同样监视添加&x,&y,得到x和y的地址分别为0x00effb14,0x00effb18

很明显,虽然 将a,b的值传给了x,y,但是a,b的地址与x,y的地址却不相同,那么改变x,y的值会改变a,b 的值吗?按F10继续调试

把Swap函数执行到最后一行,我们发现x和y的值确实发生了交换,这时我们继续调试,看看a,b的值是否发生了交换;

我们发现a,b的值并没有发生交换,那么这就说明上面的问题了,地址不同,改变x,y的值并不能改变a,b的值。这里a,b叫实参,x,y叫形参,改变形参的值实参不会发生改变。那么要改变a,b的值,就要把地址传给x,y,说到地址大家就会想到指针,指针变量就是存放地址的,那么这里先给出正确的代码:

#define _CRT_SECURE_NO_WARNINGS 1 #include #include void Swap(int *px, int *py) { int tmp = *px; *px = *py; *py = tmp; } int main() { int a = 10; int b = 20; Swap(&a, &b); printf("a=%d b=%d\n", a, b); system("pause"); return 0; }

 这里在传参时传a,b的地址,所以写为 Swap(&a,&b); 而要接收地址,就要用指针变量来接收,指针变量就是存放地址的。

在这里举个例子:   *p = 20;    这个代码理解为:通过p找到地址,并把20赋值给此地址所指的值。

                                int *p = #     这里为了方便理解写成 int *       p =# 表示为p是一个地址,类型是整形指针变量,这                                                                                                                                              样就很好理解了 

加上上面的题目,我想大家很好理解为什么要用指针了,如果要改变传入参数的值,就必须传指针。

最后给出结果:

 

 

 

 



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭