c语言形参的值能不能传递给实参
形参和实参拥有分别的存储空间,即便是指针传递,改变的也只可能是这个指针变量所指向的内容,而不是指针变量本身的值,也即,如有指针变量p,那对实参的变化,有可能改变的也只是*p的值,而不是p本身的值。
实参和形参在英文中,argument和parameter经常可以互换使用,但是C99标准规定了:
对于actualargument或actualparameter使用术语argument(译为实参);对于formalargument或formalparameter使用术语parameter(译为形参)。
为遵循这一规定,我们可以说形参是变量,实参是函数调用提供的值,实参被赋给相应的形参。因此,在上述示例中,times是pound()的实参,n是pound()的形参。类似地,在函数调用pound(times+4)中,表达式times+4的值是该函数的实参。
扩展资料
函数的调用
第1个函数调用是pound(times),times的值5被赋给n。因此,printf()函数打印了5个井号和1个换行符。第2个函数调用是pound(ch)。
这里,ch是char类型,被初始化为!字符,在ASCII中ch的数值是33。但是pound()函数的参数类型是int,与char不匹配。
程序开头的函数原型在这里发挥了作用。原型(prototype)即是函数的声明,描述了函数的返回值和参数。pound()函数的原型说明了两点:
-该函数没有返回值(函数名前面有void关键字);-该函数有一个int类型的参数。
但是,有些时候,我们把形参做成了一个指针类型,用来返回数据。因为,(指针型的)形参虽然是(指针型的)实参的一个副本,但是指针指向的内存是相同的。如果在函数内修改了指针指向的内存的数据的话,(指针型的)实参采用原来的地址,一样可以获得修改后的内存数据的。
1、直接用变量传参一般是不能传递的。因为变量在传递中是两个等值的不同变量,两者互不影响。
2、如果是指针形参p,实参q,而且在被调函数中是对*p做的修改,那这时候这种修改可以传递。因为这时候是对p q指向的内存的直接修改,这种修改可以保存,从而传递出来。
3、对数组形参做的修改也可以传递。数组名是一个常指针。