标签:
1.sizeof和strlen的区别
①sizeof是算符,在编译期间计算;strlen是函数,在运行期间计算。
②strlen只能用char*做参数,且必须是以’\0‘结尾的,计算结果不包括’\0‘。
③数组作为strlen的参数时,退化为指针;数组作为sizeof的参数时不退化。
④sizeof计算对象在内存中所占字节,strlen计算字符长度。
如:int a[10] = {0}; sizeof(a)结果为40
2.TCP/IP建立、关闭连接的过程
TCP/IP通过三次握手建立一个连接
第一次握手:客户端发生SYN包(syn=j)到服务器,并进入SYN_SEND状态,等待服务确认。
第二次握手:服务器收到SYN包,对客户的SYN进行确认(SYN=j+1),同时自己也发送一个ACK包(ack=k)。服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN包和ACK包,对ACK进行确认,向服务器发送确认包ACK(ack=k+1)。客户端和服务器进入ESTABLISHED状态,完成三次握手,客户端和服务器开始传送数据。
TCP/IP通过四次挥手关闭一个连接:
1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
3.模板类的作用
①创建动态变化大小的数据结构。
②类型无关,高复用性;平台无关,高移植性。
4.C++中4种类型转换方式
static_cast:编译器隐式执行任何类型转换都可由static_cast显示完成。执行非多态的转换。
int i; float f = 166.71; i = static_cast<int>(f);
dynamic_cast:用于安全的沿类的继承关系向下进行类型转换。
classB { public: virtual void foo(); };// 注意dynamic_cast转换时,基类中必须有虚函数,static_cast无此限制。 class D:public B { }; voidfunc(B* pb) { D* pd1=static_cast<D*>(pb); D* pd2=dynamic_cast<D*>(pb); }
reinterpret_cast:转换指针为其他类型指针。慎用
const_cast:操纵传递对象的const属性。
const B b1; B *b2 = const_cast<B*>(&b1); B &b3 = const_cast<B&>(b1); b2->m_iNum = 200; //fine b3.m_iNum = 300; //fine
标签:
原文地址:http://www.cnblogs.com/SnailProgramer/p/4496632.html