重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
前面我们说的都是无参数无返回值的函数,实际程序中,我们经常使用到带参数有返回值的函数。
10年积累的成都网站建设、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有普安免费网站建设让你可以放心的选择与我们合作。
一、函数参数传递
1.形式参数和实际参数
函数的调用值把一些表达式作为参数传递给函数。函数定义中的参数是形式参数,函数的调用者提供给函数的参数叫实际参数。在函数调用之前,实际参数的值将被拷贝到这些形式参数中。
2.参数传递
先看一个例子:
void a(int); /*注意函数声明的形式*/
main()
{
int num;
scanf("%d",num);
a(num); /*注意调用形式*/
}
void a(int num_back) /*注意定义形式*/
{
printf("%d\n",num_back);
}
在主函数中,先定义一个变量,然后输入一个值,在a()这个函数中输出。当程序运行a(num);这一步时,把num的值赋值给num_back,在运行程序过程中,把实际参数的值传给形式参数,这就是函数参数的传递。
形参和实参可能不只一个,如果多于一个时,函数声明、调用、定义的形式都要一一对应,不仅个数要对应,参数的数据类型也要对应。
void a(int,float);
main()
{
int num1;
float num2;
scanf("%d",num1);
scanf("%f",num2);
a(num1,num2);
}
void a(int num1_back,float num2_back)
{
printf("%d,%f\n",num1_back,num2_back);
}
上面的例子中,函数有两个参数,一个是整型,一个是浮点型,那么在声明、调用、定义的时候,不仅个数要一样,类型也要对应。如果不对应,有可能使的编译错误,即使没错误,也有可能让数据传递过程中出现错误。
再看一个例子:
void a(int);
main()
{
int num;
scanf("%d",num);
a(num);
}
void a(int num)
{
printf("%d\n",num);
}
看上面的例子,形式参数和实际参数的标识符都是num,程序把实际参数num的值传递给形式参数num。有些人可能就不明白了,既然两个都是num,为什么还要传递呢?干脆这样不就行了吗:
void a();
main()
{
int num;
scanf("%d",num);
a();
}
void a()
{
printf("%d\n",num);
}
其实不然,这就要涉及到标识符作用域的问题。作用域的意思就是说,哪些变量在哪些范围内有效。一个标识符在一个语句块中声明,那么这个标识符仅在当前和更低的语句块中可见,在函数外部的其实地方不可见,其他地方同名的标识符不受影响,后面我们会系统讲解作用域的问题。在这儿你就要知道两个同名的变量在不同的函数中是互不干扰的。
前面将的都是变量与变量之间的值传递,其实函数也可以传递数组之间的值。看下面的例子:
void a(int []);
main()
{
int array[5],i;
for(i=0;i5;i++) scanf("%d",array[i]);
a(array);
}
void a(int array[])
{
int i;
for(i=0;i5;i++) printf("%d\t",array[i]);
printf("\n");
}
可以实现很多功能啊,只是他不需要于使用者进行互动而已。
例如 int add(int a,int b) return a+b;
这些需要和用户交互信息的。
而void display(void) printf("Hello Word!");
这些不需要反之某一个有意义的值,但是也可以帮你实现某些功能。
个人观点,有错的地方望大神指正!
无返回值的函数,只进行某种操作。
有返回值的函数,可以将某个变量或指针返回其调用函数。
两者形式上的区别如下:
无返回值:void
fun1();
有返回值:int
fun2();
调用的区别:
无返回值:
main()
{
……
fun1();
……
}
有返回值:
main()
{
int
a;
……
a=fun2();
……
}
编译器是可以通过的。但这不是标准的写法,f函数没有声明,那么在C语言中默认是int类型的,应该有return 语句。 而且也不利于调试,因为如果要使用调试工具gbd的话,它进入函数后一定要有return才能跳出来。 我建议写代码一定要养成好的习惯,这样可以避免很多麻烦。
一个方法,可以有返回值,也可以没有!首先方法有参数,方法就像一个箱子,里面有机关。然后参数就是需要通过机关处理的东西,然后被机关处理完之后·最后从出口出来一个新的东西。那个就是返回的值。!你传进一个值~然后通过你写的方法处理,返回一个新的值,来达到你的目的。例如我写一个方法st()。方法的作用就是传递进去一个字符串,然后自动截取最后的两个字符。然后返回给你!
public string st(string str)
{
return str.substring(2,str.length-1);
}
然后你使用这个方法就会返回最后两位。。应该没写错把。。错了别拍我。
这个看的懂把。我是自学C#的。C也看过,其实大致上都是差不多的。!没有返回值的话就相当于是一个过程存储在方法里。可以反复的利用。只要需要这个过程的时候。直接用这个方法就可以了。多省事。
void表示函数无返回值,也就不需要写return。如没有返回值的函数,void要写,否则默认返回值是int型需要return语句。
关于函数返回多个值,有很多方法:
一、不返回,函数返回值依然是void,但传值的时候传变量地址,那么在函数运行中改变变量地址里的值,函数运行结束,外面实参变量也改变了。比如void fun(int* a)。
二、不返回,函数通过全局变量传递值。
三、返回数组类型(包括结构数组),在函数中将要返回的多个值放在数组中返回,比如char *fun()。