开发者社区> 问答> 正文

函数之间地址传递的方式有哪些呢?

函数之间地址传递的方式有哪些呢?

展开
收起
游客4ztx2pti3xtdw 2022-03-29 17:31:15 760 0
1 条回答
写回答
取消 提交回答
  • 形参为指针变量时函数之间的数据传递。如果函数的形参为指针类型时,对应的实参类型必须与形参的基类型相同。

    例如程序:调用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、中的一维数组名作实参的形式类似。

    2022-03-29 17:32:36
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
用计算和数据去改变整个世界 立即下载
重新定义计算的边界 立即下载
低代码开发师(初级)实战教程 立即下载