C语言:函数这样写为什么不行?调用函数通过地址访问修改被调用函数中变量的值

Unbelievably(令人难以置信的是),这样竟然不行,有人解答一下吗:

#include <stdio.h>

void COPY(int des,int src);//将src复制到des,将des原来的数覆盖
int main()
{
    int a=1,b=2;
    printf("      复制前:a=%-4db=%-4d\n",a,b);
    COPY(a,b);
    printf("      复制后:a=%-4db=%-4d\n",a,b);
    return 0;
}
void COPY(int des,int src)
{
    des=src;
    printf("COPY函数内部:des=%d src=%d\n",des,src);
}

运行结果如下:
在这里插入图片描述
并没有什么incredible的,只是说明在函数内部des和src的值修改并不会影响实际参数a、b的值,没有实现我想要的功能而已。
那怎么样才能实现我想要的功能呢?

调用函数通过地址访问修改被调用函数中变量的值

通过地址运算符&取地址

#include <stdio.h>
int main()
{
    int a=10;
    printf("   a=%d(a的值)\n  &a=%d(存放a的地址编号)\n\n",a,&a);
    printf("顺带一提,地址其实是内存空间的\n储存单位编号,是一个无符号的整数");
}

输出结果:
在这里插入图片描述

指针

在这里插入图片描述

指针变量(pointer variable)

#include <stdio.h>
int main()
{
    int a=10;
    int *p;    //声明p这是一个指针变量
    p=&a;
    printf("   a=%-10d(a的值)\n   p=%-10d(存放a的指针的变量:指针变量)\n\n",a,p);
}

输出结果:
在这里插入图片描述

间接访问符*

当*符号紧跟一个指针时,表示这是一个储存在该地址的变量。
在同一个函数调用的话等于直接使用该地址的变量名。
那么间接访问就是使用变量的地址而不是直接使用变量名来访问变量。

实现想要的功能吧!

有了上面的前置知识,就可以实现我们最初想要的功能了:

#include <stdio.h>
/*---------声明要调用的自定义函数(在CodeBlocks里不声明也行,但这是声明给人看的,--------------------
-----------让读代码的别人或以后读代码的自己看到代码时不会一脸懵逼)----------------------------------
---------------------------------------------------------------------------------------------------*/
void COPY(int *des,int *src);//将src复制到des,将des原来的数覆盖
//===================================================================================================
int main()
{
    int a=1,b=2;
    printf("      复制前:a=%-4db=%-4d\n",a,b);
    COPY(&a,&b);
    printf("      复制后:a=%-4db=%-4d\n",a,b);
    return 0;
}
void COPY(int *des,int *src)   //声明传进去的参数des和src都是指针变量,即地址
{
    *des=*src;                 //通过地址访问变量a和b,将b的值赋给a
    printf("COPY函数内部:des=%d src=%d\n",*des,*src);
}

Yeah!成功了!
输出结果:
在这里插入图片描述

尾注

因为这是我存放笔记的地方,方便我以后回来看,所以写文字内容写得有点俏皮(可能对于追求干货的人来讲,实在是臃肿又让人着急吧!)
如果不喜欢我的风格的话屏蔽掉我好了,如果能帮到你,我会很开心的!Yeah!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值