C++ 传入传出参数 详解

一、基本概念

C++ 中的参数,既可以当做传入参数,也可以当做传出参数,具体要看参数的数据类型。

  1. 非指针,非引用类型:一定是当做传入参数;
  2. 指针,引用类型:既可以当做传入参数;也可以当做传出参数;甚至可以同时是传入参数,也是传出参数。

其次要看对参数进行的操作:

  • 如果是只有读取,没有修改的,那就是传入参数,这时可以加上 const 限定符,以防不小心修改了参数。
  • 如果只有对参数进行写入,没有读取的,那就是当做传出参数的。
  • 如果对参数先进行了读取操作,然后又进行了写入操作,那么就是既当传入参数也当传出参数了。

 

二、示例

int func(int num1, int *num2)
{
    *num2 = 5;
    return num1 + *num2; 
}

其中,num1位传入参数,num2为传出参数。

传入参数本身有值,传入函数让函数使用;   传出参数本身没值,从函数中带出值(相当于函数的返回值)。

 

如何实现一个传出参数?

定义一个变量,将这个变量的地址传过去,在函数中实现对这个变量的操作。

 

函数如何返回多个值?
使用传出参数,可以实现返回多个值。

 

三、Linux 网络编程中的传入传出参数

在 Linux 网络编程中的传入传出参数也被称为值-结果参数,

当往一个套接字函数传递一个套接字地址结构时,该结构总是以引用形式来传递,也就是说传递的是指向该结构的一个指针。

该结构的长度也作为一个参数来传递,不过其传递方式取决于该结构的传递方向:进程->内核    内核->进程

1)进程->内核 传递套接字地址结构的函数有3个:bind、connect、sendto

这些函数的一个参数是指向某个套接字地址结构的指针,另一个参数是该结构的整数大小

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

 

2)内核->进程 传递套接字地址结构的函数有4个:accept、recvfrom、getsockname、getpeername

这4个函数的其中2个参数是指向某个套接字地址结构的指针和指向表示该结构大小的整数变量的指针

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

把套接字地址结构大小这个参数从一个整数改变为指向某个整数变量的指针,其原因:

当函数被调用时,结构大小是一个,进程告诉内核该结构的大小,这样内核在写该结构时不至于越界;

当函数返回时,结构大小又是一个结果,应用进程可以知道内核在该结构体究竟存储了多少信息。

这种类型的参数称为:值-结果参数

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

潇湘夜雨~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值