赞
踩
C++ 中的参数,既可以当做传入参数,也可以当做传出参数,具体要看参数的数据类型。
其次要看对参数进行的操作:
- int func(int num1, int *num2)
- {
- *num2 = 5;
- return num1 + *num2;
- }
其中,num1位传入参数,num2为传出参数。
传入参数本身有值,传入函数让函数使用; 传出参数本身没值,从函数中带出值(相当于函数的返回值)。
如何实现一个传出参数?
定义一个变量,将这个变量的地址传过去,在函数中实现对这个变量的操作。
函数如何返回多个值?
使用传出参数,可以实现返回多个值。
在 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);
把套接字地址结构大小这个参数从一个整数改变为指向某个整数变量的指针,其原因:
当函数被调用时,结构大小是一个值,进程告诉内核该结构的大小,这样内核在写该结构时不至于越界;
当函数返回时,结构大小又是一个结果,应用进程可以知道内核在该结构体究竟存储了多少信息。
这种类型的参数称为:值-结果参数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。