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!