① c语言形参的值能不能传递给实参
形参和实参拥有分别的存储空间,即便是指针传递,改变的也只可能是这个指针变量所指向的内容,而不是指针变量本身的值,也即,如有指针变量p,那对实参的变化,有可能改变的也只是*p的值,而不是p本身的值。
实参和形参在英文中,argument和parameter经常可以互换使用,但是C99标准规定了:
对于actualargument或actualparameter使用术语argument(译为实参);对于formalargument或formalparameter使用术语parameter(译为形参)。
为遵循这一规定,我们可以说形参是变量,实参是函数调用提供的值,实参被赋给相应的形参。因此,在上述示例中,times是pound()的实参,n是pound()的形参。类似地,在函数调用pound(times+4)中,表达式times+4的值是该函数的实参。
(1)c语言形参变量的值扩展阅读
函数的调用
第1个函数调用是pound(times),times的值5被赋给n。因此,printf()函数打印了5个井号和1个换行符。第2个函数调用是pound(ch)。
这里,ch是char类型,被初始化为!字符,在ASCII中ch的数值是33。但是pound()函数的参数类型是int,与char不匹配。
程序开头的函数原型在这里发挥了作用。原型(prototype)即是函数的声明,描述了函数的返回值和参数。pound()函数的原型说明了两点:
-该函数没有返回值(函数名前面有void关键字);-该函数有一个int类型的参数。
② c语言中的实参与形参
在定义函数时函数名后面括号中的变量名称为形参;在主调函数中调用一个函数时,函数名后面括号中的参数称为实参
函数point(char *p) {p+=3;} 定义时,这里的p就是形参,起传递参数的作用,没有具体值,但是它不能改变主程序中的p(形参和实参是两个相对应的变量,占有两个不同的存储空间,形参的值改变并不影响实参的值,两个是相互独立的。要想改形参里的值,必须采用传地址,即:将实参的地址传给形参,使形参和实参指向同一个值,这样改变形参,就等于改变了实参正如:
#include<stdio.h>
void point(char*& p) {p+=3;}
void main()
{
char b[4]={'a','b','c','d'}, *p=b;
point(p);
printf("%c\n", *p);
}
)
③ 在c语言中怎样使形参值改变实参值也跟着改变
在C里面 是无法做到形参改变 实参值同步改变的。
只能通过传地址的方式
即参数类型为指针
这样 形参指向空间修改,可以使得实参指向空间同步修改,因为是同一块内存区域。
另外,在C++中,可以通过引用传参,来实现你说的目的。