形参为指针变量时函数之间的数据传递。如果函数的形参为指针类型时,对应的实参类型必须与形参的基类型相同。
例如程序:调用swap函数,用指针传递的方式交换主函数中变量x和y中的数据。
1、函数之间值的传递是单向传递,也就是说函数只能通过实参把值传递给形参,若形参值改变,对实参不会产生影响;把数据从被调函数返回到主调函数的唯一途径就是通过return语句,且只能返回一个数据。若是采用以上通过传递地址值的方式,可以在被调用函数中对主调函数中的变量进行引用,通过改变形参的值而让实参的值得到相应改变,这样就可以实现把多个数据从被调用函数返回到主调用函数。
2、一维数组名作实参时函数之间的数据传递。函数之间在进行数据传递时,数组元素可以作为实参传递给形参,这时的数组元素与普通变量一样,这种传递实际上就是值的传递。在C语言中,一维数组是由若干类型相同的数组元素组成的,因为数组名本是一个地址值,通常可以把数组名作为实参传送,对应的形参就用指针变量,其基类型与数组的类型要求一致。在函数间进行数据传递时,可以通过此指针变量来引用主调函数中对应的数组元素,从而可以实现对主调函数中对应的数组元素进行数据处理。
3、当数组名作为实参时,函数调用arrin(a)对应的形参除了指针外,对应函数首部还可以写成arrin(intpa[])和arrin(intpa[N])两种形式。虽然说明的形式与数组的说明相同,但C编译程序时都把pa处理成以上的指针形式。另外,上例中被调用函数除了通过指针引用数组元素*(pa+i)外,还可以写成pa[i]的形式。
4、二维数组名作实参时函数之间的数据传递。当二维数组名作为实参时,被调函数的形参必须是一个行指针变量。例如,若主函数有以下二维数组定义:doublea[M][N];则被调函数fun的首部可以是以下三种形式之一:(1)fun(double(*pa)[N]);(2)fun(doublepa[M][N]);(3)fun(doublepa[][N])。以上无论哪种形式,与一维数组数据传递一样,系统都将把pa处理成一个指针,但是一个行指针。其处理方式一样,系统只为形参开辟一个存放地址的存储单元。
指针数组作实参时函数之间的数据传递。当指针数组作为实参时,对应的.形参应当是一个指向指针的指针。因为函数传递的是一维数组指针数组名,所以参数的定义与2、中的一维数组名作实参的形式类似。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。