11.用变量a给出下面的定义
a) 一个整型数
b) 一个指向整型数的指针
c) 一个指向指针的的指针,它指向的指针是指向一个整型数
d) 一个有10个整型数的数组
e) 一个有10个指针的数组,该指针是指向一个整型数的
a) int a;
b) int *a;
c) int **a;
d) int a[10];
e) int *a[10];
12. 使用C语言中的#define来定义一个常量来表示一年有多少秒?
#define SECONDS_PER_YEAR (606024*365)UL
一定要加括号,宏定义只是替换,不加括号会出错
13. 请问进程和线程有什么区别?
进程:资源分配的最小单位
线程:程序运行的最小单位
进程有自己的地址空间,当一个进程建立,系统就会为它分配地址空间,而线程是共享进程的数据,使用相同的地址空间。
一个进程中可包含多个线程,一个进程死掉不糊影响其他进程,一个线程死掉,整个进程都死了。
线程之间的通信更加方便,同一进程下的线程共享全局变量,静态变量等,而进程通信需要以IPC方式进行。
14. 请判断以下代码是否存在问题。
char * s1="hello";
char * s2="world";
char * s3=strcat(s1,s2);
有问题,s1与s2都为常量指针,其内容不可修改,运行就会产生段错误。
15. 请问下面的代码有什么问题?
void test1()
{
char string[10];
char* str1 = "0123456789";
strcpy( string, str1 );
}
字符串strl的末尾是以’ \0 ’结尾的,所以他的长度是11,而string的长度不够
16. 请问预处理器标识#error的目的是什么?
编译程序时,只要遇到 #error就会跳出一个编译错误当程序比较大时,往往有些宏定义是在外部指定的(如makefile),或是在系统头文件中指定的,当你不太确定当前是否定义了 XXX 时,就可以改成如下这样进行编译:
#ifdef XXX
#error "XXX has been defined"
#else
…
#endif
这样,如果编译时出现错误,输出了XXX has been defined,表明宏XXX已经被定义了。
17. 请解释以下三个变量声明的含义。
① int const *p;
② int * const p;
③ int const *p const;
int const*p=const int *p; const修饰的是指针 p,表示指针p的值不能改变,而p(即地址)是可以改变的;
int * const p; const修饰的是p(即地址)是常量,不可改变,但是*p的值可以改变。
int const *p const ; 上面两种情况兼得,表示只读,其地址以及地址中的值都不可改变
18. 请简述OSI七层模型和TCP/IP模型的组成?
OSI模型 TCP/IP模型
应用层 应用层
表示层
会话层
传输层 传输层
网络层 网络层
数据链路层
物理层 链路层
19. 请简述TCP/IP镞包含哪些分段,每一层有哪些常用协议?
应用层:http dns telnet ftp TFTP 。。。。
传输层:tcp udp
网络层:ip ICMP ARP rarp
数据链路层:ethnet ethnet2 802.3 ppp fr x.25 hdlc
物理层:比特流
20.请问TCP与UDP协议有什么区别?
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。它通过校验和,丢包时的重传控制,序号标识,滑动窗口、确认应答,次序乱掉的分包进行顺序控制实现可靠传输。即通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达; UDP尽最大努力交付,即不保证可靠交付。
3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高要求的通信或广播通信场景。
4、每一条TCP连接只能是点到点的; UDP支持一对一,一对多,多对一和多对多的交互通信方式。
5、 TCP对系统资源要求较多,UDP对系统资源要求较少。