天天看点

C/C++中的函数传参

函数参数

函数参数有实参和形参之分。

实参,顾名思义就是实际参数。是函数调用时,实际传入函数的值。

形参,就是形式参数。是函数定义或声明时,提示需要传入什么样的参数。形参的生命周期与该函数的使用相同,也就是说,函数结束时,释放形参的内存。

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保存的地址。