1.在C++11标准的语法中,auto被定义为自动推断变量的类型。
例如:
auto x=5.2; //这里的x被auto推断为double类型
2.注意点:
C语言中最简单的数据类型包括:整型、实型、字符型
实型,也称浮点型
C语言中布尔型是使用0,1表示,不存在布尔类型
另外一个可恼的是C语言不存在string类型,是char数组,\0结束
3.
c++中,声明const int i,是在哪个阶段做到 i只可读的?
编译
解析:
在c++中 const修饰的变量是常量,分配在全局区的常量区,
而我们的全局区和代码区 编译完 就已经确定,
只有栈区和堆区才是运行时分配的。
4.
错题:
unsigned int k = 20;
while (k >= 0)
--k;
死循环
解析:
k是无符号整数,永远都>=0。
5.
枚举类型:
枚举类型,指一个被命名的整型常数的集合(int型)
把枚举类型名看做是一个命名空间,命名空间内部的成员变量的使用相当于类成员使用规则
即类定义 class A{int a; float b;};
枚举类型定义: enum a{x,y=8,z};
枚举类型共享存储空间,即sizeof(a) = 4
第一个值未赋值,则默认为0,后面一个值未赋值默认为前一个值加1
则上述定义中, a::x的值是0 a::y的值是8, a::z的值是9
union数据类型:的大小计算方法是:
union的长度取决于其中的长度最大的那个成员变量的长度。
即union中成员变量是重叠摆放的,其开始地址相同。
其实union(共用体)的各个成员是以同一个地址开始存放的,每一个时刻只可以存储一个成员,这样就要求它在分配内存单元时候要满足两点:
1.一般而言,共用体类型实际占用存储空间为其最长的成员所占的存储空间;
2.若是该最长的存储空间对其他成员的元类型(如果是数组,取其类型的数据长度,例int a[5]为4)不满足整除关系,该最大空间自动延伸;
结构体:的总大小为结构体最宽基本类型成员大小的整数倍
6.
有关main函数,
void main()
{
cout<<1<<endl;
main();
}
会一直输出1,递归调用直至栈溢出
所以用户可以调用main()函数
7.
下列情况中,不会调用拷贝构造函数的是(B)
A:用一个对象去初始化同一个类的另一个新对象时
B:将类的一个对象赋值给该类的另一个对象时
C:函数的形参对象,调用函数进行形参和实参结合时
D:函数的返回值是类的对象,函数执行返回调用时
解析:
class Base{};
Base w1; //构造函数
Base w2(w1); //拷贝构造函数
w1 = w2; //赋值运算符
Base w3 = w1; //拷贝构造函数
8.
main()
{ int a[3][2]={0},(*ptr)[2],i,j;
for(i=0;i<2;i++)
{ ptr=a+i;
scanf("%d",ptr);
ptr++;//ptr++第三次的时候无法进行 因为ptr是指针数组 大小只有2
}
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}
运行时输入:1 2 3<回车>,则输出结果为:
1 0
2 0
0 0
9.
注意:
用C程序实现的算法可以没有输入但必须要有输出
10.
注意:
如果要实现一个多线程(非MFC)程序, 选择多线程CRT, 创建线程的时候应该用CreateThread还是_beginthreadex()?
选择:_beginthreadex()
解析:
_beginthreadex()比较于 CreateThread()有更高的线程安全性,不会造成多个线程共用同一个全局变量的情况
11.
有关循环队列
判空:Q.rear==Q.front;
约定为头指针指向尾指针;
队列满:(Q.rear+1)%MAXQSIZE==Q.front;
尾指针下一个位置是头指针;
循环队列插入元素是(rear+1)%MAXQSIZE;
循环队列删除元素是(front+1)%MAXQSIZE;
front比rear“小”, front=20,rear=15,说明队列中有效数据个数是 15 + (m - 20) = m - 5个
例:假设有MAXQSIZE=60(0~59)的一个数组,存储一个满循环队列Q
队列为空时,初始化Q.front=Q.rear=0
队列为满时:Q.front=0,Q.rear=59
ps:这里我们可以探讨为什么要对MAXQSIZE取余求模,详如下:
如果不取余:Q.rear+1=59+1=60,数组中最大下标为59而无60显然不取余是不对的
取余后:(Q.rear+1)%MAXQSIZE=(59+1)%60=60%60=0,而Q.front= 0,因此可以构成判断。
12.
文本加密的方法:
RSA
RC4
DES
13.
TCP协议建立连接的两方,如果一方突然发生故障(比如断电)断开了连接
1.TCP连接不能 自动查别 断连的现象
2.TCP中keepalive机制是默认不打开的
打开后会定时向连接对方发送ACK包(linux下默认是7200s 即2小时发生一次发送一次握手信息),如果在发送ACK包后对方不回应才能检测道对方的断开信息
3.可以自己实现”心跳检测”的方法来确定对方是不是已经断开连接
Heartbeat机制是客户端每个一段时间向服务器发送数据包,来通知服务端该客户端保持连接