首页 > 编程知识 正文

实参的数据类型与形参不匹配,函数返回值的类型是由什么决定的

时间:2023-05-03 14:33:13 阅读:155232 作者:4747

先引入例题。 以下正确的说法在c语言中是()。

a .实参和对应的形参各自占有独立的存储单元

b .实参和对应的形参占用一个存储单元

c .只有实参和对应的形参同名时共享存储单元

d .形参是虚拟的,不占用存储单元

答案: a

实参和形参是各自独立记忆的空问,在函数调用中,实参将复制值复制到形参中。 实参是变量,形参

也是变量。 如果占用相同的空间,则在编译时不会存在实际参数类型不一致的错误参数的传递,形状参数值的变化不影响实际参数值。

那么,数组名作为函数的形式参数,这两个数组共同占有同一个存储单元,在存储空间上完全重叠(虚实结合),可能会产生疑问。 数组名称实际上始终是指针,因此用作参数不会更改指针地址。 (被引用时,实际上指针会被临时复制,但指针的地址不会改变。 )因此,存储器单元)指针指向的存储器)的一部分被占用

我们理解的时候,可以认为参与数组和形状参数组在存储器空间上是完全一致的。 换句话说,波形参数组的第一位置a[0]与波形参数组b[0]的地址相同,共同指向一个数字。 在函数中,如果形参的指向发生变化,实参的指向也会发生变化(虚实结合)

如图所示,这与实参和对应的形参分别占有独立的存储器单元并不矛盾。

让我们看看有人在网上使用这个例子

# include stdio.hvoidchange (inta [ ] ) {a=a 2; //数组a的地址2 (指示a[0] ) printf )“%dn”,a[0] ); //实际输出的是a[2],变更开头地址(}int main ) (inta ) )={ 6,4,2 }; 变更(a ); //输入数组a的地址printf(%d(n ),a[0] )。 }

为了证明数组的形参和实参不重叠,这实际上是不正确的。

因为在函数中a=a 2; 这个命令实际上更改了a的起始地址

程序改进:

#includestdio.hvoidchange(inta ) ) a(0)=a )0) 2; //数组a中第一个位置的数量1printf('%DN”,a[0] ); (}int main ) ) (inta ) )={ 6,4,2 }; 变更(a ); //输入数组a的地址printf(%d(n ),a[0] )。 }

实际上,在a[0]的位置6(2=8),排列的形状参与实践而重叠。

因此,如果用main ) )函数执行,结果将保持为8

总结:

实参和对应的形参各自占有独立的存储单元,阵列的形参和实参同时指向同一地址

有什么不足的地方,欢迎大家指出来

操作系统: Windows10

软件: Devc

编译器: TDM-gcc4.9.264位版本

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。