函数 函数原型 函数的形参 实参

函数原型由函数返回类型、函数名和参数表组成

        这里的void就是返回类型 func就是自己定义的函数名,参数表就是()括号里面的参数,可以有多个,这个p就是函数的形参。 可以有多个形参。

        形参和实参是相对而言的,调用函数的时候传进去的参数就是实参。实际的参数,下面的p就是我实际创建的参数。

 

        关于函数的形参有个重要的知识点需要掌握,也就是形参是新创建出来的一个临时变量来接收传进来的实参。

        下面举一个例子:

 这里把a传进去是想通过函数func将我的a改变成100,但是实际上没有将我传进去的这个实参值进行改变,还是原来的10。那是因为函数在接收实参时候会创建一个形参来进行赋值操作,让新创建的b的内容等于a的内容。这样你在函数里面做的任何修改,都只是在修改形参b,没有办法改到真正的实参a。

        我们可以通过指针得到实参a在内存的地址,这样就可以实际改到a的内容了。 

     和上面讲的一样,形参创建了一个临时变量p,让p去做赋值操作,int *p=实参传进来p的内容。

这样在函数里面的各种操作就是对p指向的那块内存地址的内容实际操作了。

如果传进来的参数和形参类型不相符怎么办呢?c对语言的包容性还是很强的,会进行隐式类型转换,也就是编译器自动帮你转化。

 形参会将传进来的实参进行一定的转换,比如char类型的字符型,就会转成相应的asc码对应的数值。因为int类型为4字节,char类型为1字节,不会造成任何的数据丢失,可以将char所表示的内容完完全全的赋值下来。

那形参如果比实参的字节小呢?也就是说形参没有办法完完全全的把相应的内容赋值下来,只能断章取义了。

 这里的显示就是断章取义的显示,直取了四字节的1字节部分进行显示。为了避免不必要的错误,实参和形参的数据类型一定要严格匹配。

关于数组当实参传递,为了可读性的话,是这种方式比较简便。

但往往不用这种方式来传参数组,一般的形参都是指针类型。前面有讲过数组名其实就是指向第一个数组元素的指针。所以函数的形参可以定义为与之对应的指针类型。

但是为什么可以用[ ]中括号的方式来访问数组内的元素呢?,因为arrx[n]这个方式的本质是在这个指针的位置向后偏移n位的内容。所以传的时候也可以传arr+1 arr+2来改变函数中数组的起始位置。

就像这样,向后偏移了1个int类型到达了b,解出了b的内容。注意,偏移的距离和指针的类型有关

 也可以通过相应的数组指针来解出你想要的每个位置的值。但是有警告,因为形参定义数组指针的时候没法确定数组内有多少个元素。用的比较少,不建议这种做法。因为是先创建出来的数组指针形参,赋值实参的时候和实参的数组指针类型不是严格对应,所以会有警告。总而言之,不建议将函数形参设置为数组指针类型。

 

 

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值