1,程序执行过程:编辑->编译->链接->加载->执行;
编译:词法分析器->语法分析器->代码生成器-----生成目标程序;
链接:把散乱目标程序,链接在一起 ;
加载:是加载已经执行的文件,避免重新编译,连接---得到.exe文件
2,1个字节8个位,Char 1;int 2;long int ,float 4; double 8;
字符用单引号,'a' ,3,'3', a 的区别;'a'占一个字节,a为变量;3为整型 占两个字节,'3'为字符型 占一个字节;
字符串用双引号(后面自动加\0作为结尾) :“world” 为6个字节;
printf(“%m.n”,sizeof(int a)) :m->表示输出值得整体数长度,n->表示输出值小数点几位;
3,条件运算符(3目运算符) 表达式1?表达式2:表达式3;1为真则2,1为假则为3;
4,逗号表达式: b=(3*5,4+6) ,b=10;
5,a=a+b<<==>>a+=b;
6,scanf("%3d",&a);表示输入的整型宽度不为3,如果输入时长于3则截取前3位数字;
scanf("%ld",&a);scanf("%hd",&a);分别输入长整型,短整型;
scanf("%d%*d%d); 跳过中间的输入数字;scanf("%d%*c%c") 输入10 r 避免输入空格;
int 1=1234,printf("%*d",5,i);宽度为5;
7.函数递归: 直接递归(调用本函数) 间接递归(两个以上函数互相调用)
8.预处理(编译前): 宏定义:#define PI 3.14
#undef PI
文件包含: <stdio.h> 尖括号 的文件在标准目录中
"stdio.h" 在指定路径中, 若为指定则当前路径,若找不到,则在标准目录中寻找;
字符的输入输出
scanf("%c",&char) printf("%c",char)
char=getc(stdin) putc(char,stdout)
char=getch() /输入时屏幕不显示输入的值 putch(char)
char=getchar() 从缓存区获取输入值 putchar(char)
例子: void main(){
char m_char,m_char2;
m_char=getc(stdin);
putc(m_char,stdout);
m_char2=getchar();
putchar(m_char2)} 输入:A "回车键" 输出值:A" 换行" 原因:m_char 获取A, m_char2获取到了缓存区的“回车键"所以有换行输出
9:联合体数据类型: union men{
int v;
float t;
}
union 数据类型与 数据结构的区别:联合体数据类型只能取里面的一个数据类型,如果多取,取最后一个;
10:枚举数据类型: enum mon{jan,jan1,jan2,jan3} 依次赋值0,1,2,3
一、6.MFC中CString是类型安全类么?为什么?
答:不是,其它数据类型转换到CString可以使用CString的成员函数Format来转换 ;
二、const与static的二者的区别? 引用与指针有什么区别?全局变量和局部变量在内存中是否有区别?如果有,是什么区别?
答:1、static 用来控制变量的存储方式和可见性,静态存储;const 类似取代预处理(#define max 100),同时消除了预处理不能享受c++严格类型检查的缺点;
2、1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
3) 不存在指向空值的引用,但是存在指向空值的指针。
3、全局变量储存在静态存储区,局部变量在堆栈
三、什么是平衡二叉树?什么函数不能声明为虚函数? Internet物理地址和IP地址转换采用什么协议?
答:1、左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1
2、构造函数
3、ARP (Address Resolution Protocol)(地址解析协议)
四、某32位系统下, C++程序,请计算sizeof 的值(5分).
char str[] = “http://www.baidu.com/”
char *p = str
请计算 sizeof (str ) = ?(1)
sizeof ( p ) = ?(2)
Sizeof(*p)=? (3)
char sq[100];
sizeof(sq)=?(4)
void fun ( char sq[100]){
请计算
sizeof( sq ) = ?(5)
}
void *p = malloc( 100 );
请计算 sizeof ( p ) = ?(6)
答:(1)22 (2)4 (3) 4 (4)100 (5)4 (6)4
五、TCP/IP 建立连接的过程?(3-way shake)
答:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状 态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个 SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1) ,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
七、动态连接库的两种方式?
答:调用一个DLL中的函数有两种方法: 1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数 ,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向 系统提供了载入DLL时所需的信息及DLL函数定位。 2.运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或Loa dLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的 出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了 。