当前位置:首页 > TAG信息列表 > 自定义函数要注意些什么?

自定义函数要注意些什么?

C语言,自定义函数要注意些什么?

网友解答:

函数是一段可以重复使用的代码,用来独立地完成某个功能,它可以接收用户传递的数据,也可以不接收。接收用户数据的函数在定义时要指明参数,不接收用户数据的不需要指明,根据这一点可以将函数分为有参函数和无参函数。

将代码段封装成函数的过程叫做函数定义。

无参函数的定义

如果函数不接收用户传递的数据,那么定义时可以不带参数。如下所示:

C语言,自定义函数要注意些什么?

datatypefunctionname(){

//body

}

datatype是返回值类型,它可以是c语言中的任意数据类型,例如int、float、char等。

functionname是函数名,它是标识符的一种,命名规则和标识符相同。函数名后面的括号()不能少。

body是函数体,它是函数需要执行的代码,是函数的主体部分。即使只有一个语句,函数体也要由{}包围。

如果有返回值,在函数体中使用return语句返回。return出来的数据的类型要和datatype一样。

例如,定义一个函数,计算从1加到100的结果:

intsum(){

inti,sum=0;

for(i=1;i<=100;i++){

sum+=i;

}

returnsum;

}

累加结果保存在变量sum中,最后通过return语句返回。sum是int型,返回值也是int类型,它们一一对应。

return是c语言中的一个关键字,只能用在函数中,用来返回处理结果。

将上面的代码补充完整:

#include<stdio.h

intsum(){

inti,sum=0;

for(i=1;i<=100;i++){

sum+=i;

}

returnsum;

}

intmain(){

inta=sum();

printf("thesumis%dn",a);

return0;

}

运行结果:

thesumis5050

函数不能嵌套定义,main也是一个函数定义,所以要将sum放在main外面。函数必须先定义后使用,所以sum要放在main前面。

注意:main是函数定义,不是函数调用。当可执行文件加载到内存后,系统从main函数开始执行,也就是说,系统会调用我们定义的main函数。

无返回值函数

有的函数不需要返回值,或者返回值类型不确定(很少见),那么可以用void表示,例如:

voidhello(){

printf("hello,worldn");

//没有返回值就不需要return语句

}

void是c语言中的一个关键字,表示“空类型”或“无类型”,绝大部分情况下也就意味着没有return语句。

有参函数的定义

如果函数需要接收用户传递的数据,那么定义时就要带上参数。如下所示:

datatypefunctionname(datatype1param1,datatype2param2...){

//body

}

datatype1param1,datatype2param2...是参数列表。函数可以只有一个参数,也可以有多个,多个参数之间由,分隔。参数本质上也是变量,定义时要指明类型和名称。与无参函数的定义相比,有参函数的定义仅仅是多了一个参数列表。

数据通过参数传递到函数内部进行处理,处理完成以后再通过返回值告知函数外部。

更改上面的例子,计算从m加到n的结果:

intsum(intm,intn){

inti,sum=0;

for(i=m;i<=n;i++){

sum+=i;

}

returnsum;

}

参数列表中给出的参数可以在函数体中使用,使用方式和普通变量一样。

调用sum()函数时,需要给它传递两份数据,一份传递给m,一份传递给n。你可以直接传递整数,例如:

intresult=sum(1,100);//1传递给m,100传递给n

也可以传递变量:

intbegin=4;

intend=86;

intresult=sum(begin,end);//begin传递给m,end传递给n

也可以整数和变量一起传递:

intnum=33;

intresult=sum(num,80);//num传递给m,80传递给n

函数定义时给出的参数称为形式参数,简称形参;函数调用时给出的参数(也就是传递的数据)称为实际参数,简称实参。函数调用时,将实参的值传递给形参,相当于一次赋值操作。

原则上讲,实参的类型和数目要与形参保持一致。如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型,例如将int类型的实参传递给float类型的形参就会发生自动类型转换。

将上面的代码补充完整:

#include<stdio.h

intsum(intm,intn){

inti,sum=0;

for(i=m;i<=n;i++){

sum+=i;

}

returnsum;

}

intmain(){

intbegin=5,end=86;

intresult=sum(begin,end);

printf("thesumfrom%dto%dis%dn",begin,end,result);

return0;

}

运行结果:

thesumfrom5to86is3731

定义sum()时,参数m、n的值都是未知的;调用sum()时,将begin、end的值分别传递给m、n,这和给变量赋值的过程是一样的,它等价于:

m=begin;

n=end;

函数不能嵌套定义

强调一点,c语言不允许函数嵌套定义;也就是说,不能在一个函数中定义另外一个函数,必须在所有函数之外定义另外一个函数。main()也是一个函数定义,也不能在main()函数内部定义新函数。

下面的例子是错误的:

#include<stdio.h

voidfunc1(){

printf("http://c.biancheng.net");

voidfunc2(){

printf("c语言小白变怪兽");

}

}

intmain(){

func1();

return0;

}

有些初学者认为,在func1()内部定义func2(),那么调用func1()时也就调用了func2(),这是错误的。

正确的写法应该是这样的:

#include<stdio.h

voidfunc2(){

printf("c语言小白变怪兽");

}

voidfunc1(){

printf("http://c.biancheng.net");

func2();

}

intmain(){

func1();

return0;

}

func1()、func2()、main()三个函数是平行的,谁也不能位于谁的内部,要想达到「调用func1()时也调用func2()」的目的,必须将func2()定义在func1()外面,并在func1()内部调用func2()。

有些编程语言是允许函数嵌套定义的,例如javascript,在javascript中经常会使用函数的嵌套定义

网友解答:

没啥要特别注意的,符合语法规范,链接合并编译能够通过就行。


博承号 丰特号

  • 关注微信关注微信

猜你喜欢

微信公众号