c语言 有参有返回 例子,有参函数,C语言有参函数详解

从形式上看,函数可分为两类:无参函数和有参函数。

所谓无参函数,是指在主调函数调用被调函数时,主调函数不向被调函数传递数据。无参函数一般用来执行特定的功能,可以有返回值,也可以没有返回值,但一般以没有返回值居多。

有参函数,是指在主调函数调用被调函数时,主调函数通过参数向被调函数传递数据。在一般情况下,有参函数在执行被调函数时会得到一个值并返回给主调函数使用。

有参函数是重点,我们主要介绍有参函数。

有参函数

定义有参函数的一般形式为:

函数类型 函数名(参数类型1 参数名1, 参数类型2 参数名2, …, 参数类型n 参数名n)

{

声明部分

语句部分

}

参数可以是一个,也可以是多个。下面给大家举一个例子:

# include int main(void) { int Max(int x, int y); //对Max函数的声明, x、y称为形参 int a = 1, b = 2; printf("max = %dn", Max(a, b)); //a、b称为实参 return 0; } //定义Max函数 int Max(int x, int y) { int z; //函数体中的声明部分 if (x > y) //下面是语句部分 { z = x; } else { z = y; } return (z); //返回z的值给主调函数使用 }

输出结果是:

max = 2

这个程序分两个部分,一个是主函数 main,另一个是自定义的函数 Max。Max 函数在主函数 main 的下面,它有两个参数,它的功能是求出 x 和 y 二者中的最大值。

形参和实参

下面先来讲一下“形参”和“实参”的概念。

在定义 Max 函数时,函数名 Max 后面括号中的参数 x、y 称为形式参数,简称形参。而在主调函数 main 中调用 Max 函数时,Max 函数名后面括号中的参数 a、b 称为实际参数,简称实参。实参可以是常量、变量或表达式,但它们必须要有确定的数值。在调用被调函数时将实参的值赋给形参。

在定义函数时,必须要指定形参的类型。实参与形参的个数必须相等,若不相等就是语法错误。此外,实参与形参的类型要相同或赋值兼容。最好是相同,这样不容易出错。如果不相同则实参按形参的类型转化,然后再送给形参。

在传递数据时,实参与形参是按顺序一一对应的。在 C 语言中,实参向形参的数据传递是“值传递”、单向传递,即只能由实参传给形参,不能由形参传回给实参。因此在执行被调函数时,形参的值如果发生改变,并不会改变主调函数中实参的值。

而且,在未出现函数调用时,形参并不占用内存中的存储单元。只有在发生函数调用时,函数 Max 中的形参才会被分配内存单元。调用结束后,形参所占的内存单元随之会被释放。

定义函数时,第一行“int Max(int x,int y)”称为函数首部。函数首部有两个数据类型,一个是“函数类型”,另一个是“参数类型”。函数名左边的类型叫“函数类型”,或“函数的返回值类型”。如果不想要返回值,那么这里就写 void。若使用 void 就不能有返回值,否则就是语法错误。需要注意的是,不能有返回值不代表不能有return语句:

return;

这也是正确的。只要 return 后面什么都不加就行,因为什么都不加也表示没有返回值。整个 return 语句全部都不写也可以。但是如果需要跳出被调函数的话就写上“return;”。

函数名后面括号中的数据类型是所传递的参数的类型。如果不希望定义的函数接收数据,或者说不想有参数传递进来,那么这里就写 void 或什么都不写,比如 int Max(void)。这就表示拒绝接受数据传递,这样实参的值就传不进来了。主函数 main 的首部都是这么写的:

int main(void)

即不允许有值传递进来。但是,如果被调函数的参数类型定义成 void,那么主调函数在调用它的时候就不能有实参,否则也是语法错误。

此外,如果函数名后面括号中什么都不写,那么默认的也是 void。

综上所述,函数首部的两个数据类型是不一样的。一个函数可以有返回值,也可以没有返回值;可以接收数据,也可以不接收数据。这个就是通过这两个数据类型控制的。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 C 语言中,bind() 函数用于将一个套接字与一个特定的 IP 地址和端口号绑定在一起,以便监听该 IP 地址和端口号上的连接请求。bind() 函数的定义如下: ```c #include <sys/socket.h> int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); ``` 其中,sockfd 是要绑定的套接字描述符,addr 是一个指向 sockaddr 结构体的指针,该结构体包含要绑定的 IP 地址和端口号信息,addrlen 是 sockaddr 结构体的大小。 下面是一个简单的使用 bind() 函数例子: ```c #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <string.h> int main() { int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { printf("创建套接字失败\n"); return 1; } struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_port = htons(12345); if (bind(sockfd, (struct sockaddr*)&addr, sizeof(addr)) < 0) { printf("绑定套接字失败\n"); return 1; } printf("套接字绑定成功\n"); close(sockfd); return 0; } ``` 在上面的例子中,首先使用 socket() 函数创建一个套接字,并指定协议族为 AF_INET,Socket 类型为 SOCK_STREAM,协议版本为 0。接着,使用 memset() 函数将 addr 结构体清零,然后设置结构体中的成员变量,包括地址族、IP 地址、端口号。最后,使用 bind() 函数将套接字 sockfd 绑定到 addr 结构体中指定的 IP 地址和端口号。如果绑定成功,则输出“套接字绑定成功”,否则输出“绑定套接字失败”。最后,使用 close() 函数关闭套接字。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值