函数参数
函数参数有实参和形参之分。
实参,顾名思义就是实际参数。是函数调用时,实际传入函数的值。
形参,就是形式参数。是函数定义或声明时,提示需要传入什么样的参数。形参的生命周期与该函数的使用相同,也就是说,函数结束时,释放形参的内存。
example:
#include <stdio.h>
void fun(int data_2)//data_2为形参
{
}
int main()
{
int data=9;
fun(data_1);//data_1为实参,实际上是执行一次赋值操作,也就是data_2=data_1
//注意data_2的改变与data_1的改变无关。
return 0;
}
接下来是重点!!
怎么样才能通过形参来改变实参的值呢?
大致有三种方法
一,全局变量
二,传指针
三,传引用
上面的都不是重点
下面的才是
重点解释---------函数传指针的引用-----------
首先看函数传指针
example:
#include <stdio.h>
void fun(int *p)
{
*p=1;
p=NULL;
}
int main()
{
int data=0;
int* p=&data;
fun(p);
printf("%d",(p==NULL));//输出0
printf("%d",data);//输出1
return 0;
}
上面的代码挺简单的,就是通过传地址改变data的值,但是注意,p并没用变成空指针,因为函数能够通过地址找到在内存中的data,并可以对其进行操作,但是指针函数中的p是形参,与主函数中的p是两码事。但是两个指针都指向同样的地址。
下面改变代码
#include <stdio.h>
void fun(int *&p1)
{
*p1=1;
p1=NULL;
}
int main()
{
int data=0;
int* p=&data;
fun(p);
printf("%d",(p==NULL));//输出1
printf("%d",data);//输出1
return 0;
}
改为传指针的引用,即时int*&p,输出结果就变了,因为此次传递是传递主函数中指针p的引用,也就是说主函数的指针p和函数中的指针p1是同一个指针,也指向同一个地址。也可以理解成传参时,执行了p1=&p,在函数中改变p1中保存的地址,也就改变了主函数中p保存的地址。