1, 给出指针的数据类型
a,float (**p)[10]
b, double *(*p)[10]
c, 记不清了,大概是 char *(*p)()之类的
d, int *((*p)[10])
2,给出进程间通信的方法
11.5回答:最常用的进程间通信的方式有-信号,信号量,消息队列,共享内存。
例外: 在Win32下提供的进程间通信方式有以下几种:
(1)剪贴板Clipboard:在16位时代常使用的方式,CWnd类中提供了支持。
(2)COM/DCOM:通过COM系统的代理存根方式进行进程间数据交换,但只能够表现在对接口函数的调用时传送数据,通过DCOM可以在不同主机间传送数据。
(3)Dynamic Data Exchange (DDE):在16位时代常使用的方式。
(4)File Mapping:文件映射,在32位系统中提供的新方法,可用来共享内存。
(5)Mailslots:邮件槽,在32位系统中提供的新方法,可在不同主机间交换数据,分为服务器方和客户方,双方可以通过其进行数据交换,在Win9X下只支持邮件槽客户。
(6)Pipes:管道,分为无名管道:在父子进程间交换数据;有名管道:可在不同主机间交换数据,分为服务器方和客户方,在Win9X下只支持有名管道客户。
(7)RPC:远程过程调用,很少使用,原因有两个:复杂而且与UNIX系统的RCP并不完全兼容。但COM/DCOM的调用是建立在RPC的基础上的。
(8)Windows Sockets:网络套接口,可在不同主机间交换数据,分为服务器方和客户方。(相关介绍见Visual C++/MFC入门教程 第六章 网络通信开发)
(9)WM_COPYDATA:通过发送WM_COPYDATA消息并将数据放在参数中来传递数据给其他进程。
3,给出程序执行结果
a void func(char **p, int num)
{
*p = malloc(num);
}
main()
{
char *p=NULL;
func(&p, 100);
strcpy(p,"blabla");
printf("%s",p);
free(p);
}
11.4回答:打印了 blabla
b main()
{
char *p=NULL;
p = malloc(100);
strcpy(p,"blabla");
free(p);
printf("%s",p);
}
打印了 blabla 都是在win-tc下调试通过的,在vc6.0会提示void * to char * 的类型转换 问题
4,a,一个正整数序列,值最大不超过K,没有重复项,给出排序算法
答: 冒泡法和快速排序法随便用吧(不过,数据都是整数,并且数值不大(几千以内),则用计数排序法)
b,如果有重复项,需要对排序算法做何改动
答: 这个好像没有什么改进的吧
c,证明算法最坏情况下复杂度为O(N)
d,给出算法的空间复杂度
9 比较两套程序写法哪个好,为什么
a
(1) for(i=1;i<k;i++)
{
a = i + b + c * j;//每次都执行这个语句
printf("%d",a);
}
(2) a = b + c * j;
for(i=1;i<k;i++)
{
printf("%d",a+i); 这个效率高;
}
b char a
(1) if(a=='A') ....
(2) if('A'==a) ....这个好,理由是防止犯低级错误 a='A';