C语言中的值传递

来源:互联网 发布:淘宝哪家护肤品是正品 编辑:程序博客网 时间:2024/04/30 10:06

值传递问题

  C语言是面向过程的语言,它把一个复杂的问题分解成一个一个子问题,然后通过函数去实现一个个子问题,也就是说函数是C语言基本的功能模块,函数也是源程序的基本组成单元。程序可采用自顶向下,逐步细化的设计方法把若干个独立的模块组装成所要求的程序。

  C程序有且仅有一个主函数main,程序从主函数开始到主函数结束,主函数通过调用其它函数解决某个问题,其它函数也可以调用函数,但不能调用主函数。如果函数在被调用之前定义,那么被调函数就不用进行声明,否则要进行声明。

  主调函数通过实参将值传递给被调函数的形参,注意实参和形参虽然要一一对应,但这是两个不同的变量,它们占用不同的存储空间,实参是在被定义时就占用存储空间,而形参是在被调用时才占用存储空间。实参可以是变量,常量但必须有确定的值,以便将值复制一份给形参,所以形参在被调函数中进行处理并不会影响实参的值,所以函数之间值是单向传递。形参可以通过return语句返回一个值给主调函数。

  值传递还有一种情况是地址传递(本质也是值传递,只不过值是地址)。当实参是一个地址或着是一个指针时(数组名也是数组的首地址),这时实参和形参共用一个存储空间,形参在被调函数中处理会影响那个地址中的变量,所以此时形参会改变实参的值。那这种情况不就是值双向传递了吗?注意此时虽然形参改变了实参,但并不是值的双向传递,因为实参传递给形参的值是一个地址,而形参也没改变这个地址,只是改变了这个地址中变量的值。这是通过地址间接改变实参的值,并不是值的双向传递。

 

0 0
原创粉丝点击