当前位置:   article > 正文

C++ 传入传出参数 详解_c++ 出参

c++ 出参

一、基本概念

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

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

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

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

 

二、示例

  1. int func(int num1, int *num2)
  2. {
  3. *num2 = 5;
  4. return num1 + *num2;
  5. }

其中,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);

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/798337
推荐阅读
相关标签
  

闽ICP备14008679号