![](https://csdnimg.cn/release/download_crawler_static/87200333/bg5.jpg)
29.ISO 的七层模型是什么?
tcp/udp 是属于哪一层?tcp/udp 有优缺点?
答案:应用层表示层会话层 传输层网络层链路层物理层 ;
tcp /udp 属于传输层 ;
TCP 效劳提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。与 TCP
不同, UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。由于 UDP 比
较简单, UDP 头包含很少的字节,比 TCP 负载消耗少。 tcp: 提供稳定的传输效劳,有
流量控制,缺点是大,冗余性不好 udp: 不提供稳定的效劳,小,开销小
30:(void *)ptr 和 (*(void**))ptr 的结果是否一样?其中 ptr 为同一个指针
答案:.(void *)ptr 和 (*(void**))ptr 值是一样的
31:
int main()
{
int x=3;
printf("%d",x);
return 1;
}
问函数既然不会被其它函数调用,为什么要返回 1?
答案:mian 中,c 标准认为 0 表示成功,非 0 表示错误。具体的值是某中具体出错信息
32 要对绝对地址 0x100000 赋值,我们可以用 (unsigned int*)0x100000 = 1234; 那么要是想让
程序跳转到绝对地址是 0x100000 去执行,应该怎么做?
答 案 : *((void (*)( ))0x100000 ) ( ); 首 先 要 将 0x100000 强 制 转 换 成 函 数 指 针 , 即 : (void
(*)())0x100000 然后再调用它: *((void (*)())0x100000)(); 用 typedef 可以看得更直观些: typedef
void(*)() voidFuncPtr;
*((voidFuncPtr)0x100000)();
33,一个数组 table,用一个宏定义,求出数据的元素个数
答案: #define NTBL(table)(sizeof(table)/sizeof(table[0]))
34。线程与进程的区别和联系? 线程是否具有一样的堆栈? dll 是否有独立的堆栈?
答案:进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的
时候操作系统就帮你创立了一个主线程。每个线程有自己的堆栈。 DLL 中有没有独立的堆
栈,这个问题不好答复,或者说这个问题本身是否有问题。因为 DLL 中的代码是被某些线
程所执行,只有线程拥有堆栈,如果 DLL 中的代码是 EXE 中的线程所调用,那么这个时候
是不是说这个 DLL 没有自己独立的堆栈?如果 DLL 中的代码是由 DLL 自己创立的线程所
执行,那么是不是说 DLL 有独立的堆栈?以上讲的是堆栈,如果对于堆来说,每个 DLL 有
自己的堆,所以如果是从 DLL 中动态分配的存,最好是从 DLL 中删除,如果你从 DLL 中
分配存,然后在 EXE 中,或者另外一个 DLL 中删除,很有可能导致程序崩溃
35。