这道题答案为什么是5,11
求解!
不是说形参不能影响实参嘛,为什么不是5,5
因为函数fun()中的静态变量m和i的值改变了。
第一次调用fun():
首先,x=1,y=1,m=0,i=2;
然后,i+=m+1,i=i+m+1=2+0+1=3;
接着,m=i+x+y, m = 3+1+1=5;
最后,返回5;
所以第一次调用k=fun(j,m)=5,打印出k的值为5;
第二次调用fun():
首先,x=1,y=1,m=5,i=3;(因为m和i都是静态变量,所以其值为第一次调用fun()后改变后的值)
然后,i+=m+1, i=i+m+1=3+5+1=9;
接着,m=i+x+y=9+1+1=11;
最后,返回11;
所以第二次调用k=fun(x,y)=11,打印k的值为11。
测试代码如下:
参考链接:
#include <stdio.h>
int fun(int x,int y){
// https://blog.csdn.net/MQ0522/article/details/110850832
static int m=0,i=2;
printf("\nx=%d,y=%d,m=%d,i=%d\n",x,y,m,i);
i+=m+1;
printf("x=%d,y=%d,m=%d,i=%d\n",x,y,m,i);
m=i+x+y;
printf("x=%d,y=%d,m=%d,i=%d\n\n",x,y,m,i);
return m;
}
int main(void){
int j=1,m=1,k;
k=fun(j,m); printf("%d,",k);
k=fun(j,m); printf("%d\n",k);
return 0;
}
服务端如果只bind了ip和端口,但是没有调用listen让这个socket监听连接,这时候如果客户端朝这个服务端socket发数据,会发生啥?
如果没有listen,说明未完成三次握手来建立连接,则客户端发送的报文就不在服务端已建立的TCP连接列表中,那么服务端会直接回复RST报文。