C语言中自定义函数的定义和使用

C语言中,自定义函数是由程序员自己编写的函数,可以根据需要进行调用。自定义函数可以提高程序的可读性和可维护性,同时也可以减少代码的重复性。

自定义函数的定义包括函数名、参数列表和函数体。函数名是用来标识函数的名称,参数列表是函数的输入参数,函数体是函数的具体实现。

在C语言中,函数的定义通常包括以下几个部分:

  1. 返回类型:函数的返回值类型,可以是整型、浮点型、字符型等。

  2. 函数名:函数的名称,用来标识函数。

  3. 参数列表:函数的输入参数,可以有多个参数,每个参数包括参数类型和参数名称。

  4. 函数体:函数的具体实现,包括变量的定义、语句的执行等。

例如,下面是一个简单的自定义函数的定义:

int add(int a, int b) {
    int sum = a + b;
    return sum;
}

这个函数的名称是add,返回类型是int,参数列表包括两个整型参数a和b,函数体中定义了一个整型变量sum,计算a和b的和并将结果返回。

调用自定义函数时,需要使用函数名和参数列表来调用函数。例如,调用上面定义的add函数可以使用以下代码:

int result = add(3, 4);

这个代码会将3和4作为参数传递给add函数,并将计算结果赋值给result变量。

当实参传递给形参的时候,形参是实参的一份临时拷贝,对形参的修改不能改变实参。

传值调用

函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。

传址调用

传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。
这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量。

例:

void change(int* px,int*py)

{
	int z=0;
    z=*px;  //a的值给z
    *px=*py;  //b的值给a
    *py=z;   //z的值给b
}
int mian()
{
    int a=0,b=0;
    scanf("%d%d",&a,&b);
    printf("交换前:a=%d b=%d\n",a,b);
    change(&a,&b);
    printf("交换后:a=%d b=%d\n",a,b);
    return 0;
}
int num(int arr[],int k)
{
    int size = sizeof(arr)/sizeof([0]);
}
/*这是一个错误示范
数组传参实际上传递的是数组首元素的地址,而不是整个数组
所以在函数内部计算有一个函数参数部分的元素个数是不靠谱的*/

函数可以嵌套调用,但是不可以嵌套定义

函数不写返回值的时候,默认返回类型为int

返回的是函数执行过程中最后一条指令执行结果

在定义函数时()中写入void说明函数不需要传入参数

本质上main函数有三个参数main(int argc,char* argv[],char* envp[]){}

如果函数定义在调用函数的后面,则需要在调用函数以前进行函数的申明

格式为:返回值类型 函数名(参数类型)

代码量较多时将函数的声明建立在头文件中,函数定义在其它源文件中,调用函数时需要导包:#include “头文件名”

函数的递归: 递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件。 如果没有结束条件会导致局部变量不能被释放造成栈溢出

总之,自定义函数是C语言中非常重要的概念,可以帮助程序员提高代码的可读性和可维护性,同时也可以减少代码的重复性

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X_papada

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值