1.填空选择题
1.请写出 char *p 与“零值”比较的 if 语句 if (NULL == p)
2、写出打印结果___255___
#include
#include
int main()
{
char a[1000];
int i;
for(i=0;i<1000;i++)
{
a[i]=-1-i;
}
printf("%d",strlen(a));
return 0;
}
3、分析输出结果_________8 8_____________
int arr[] = {6,7,8,9,10};
int *ptr = arr;
*(ptr++)+=123;
printf(“ %d %d ”, *ptr, *(++ptr));
f(657, 789)_______723_________
int f(int x, int y)
{
return (x&y)+((x^y)>>1)
}
5、Linux文件权限一共10位长度,分成四段,第三段表示的内容是____c_________
A、文件类型
B、文件所有者的权限
C、文件所有者所在组的权限
D、其他用户的权限
二.简答题
1.用变量a给出下面的定义
1) int a; a 是一个整型变量
2) int *a; a是一个整型指针变量
3)int**a; a 是一个指针变量,该指针指向一个整形指针的地址
4) int a[10]; a是一个有10个元素的整型数组
5) int *a[10]; a是一个有10个元素的整型数组,该数组中的元素是整型指针
6) int (*a)[10]; a是一个指针变量,该指针指向一个有10个元素的整型数组
7) int (*a)(int); a是一个函数指针变量,该函数的参数是整型,返回值为整型
8)int (*a[10])(int); a是一个有10个元素的整型数组
,该数组中的元素是指针,该指针指向一个函数,该函数的参数为整型,返回值为整型
2、关键字const的作用是什么?
1.想要阻止一个变量被改变,可以使用const关键字,通常需要对它进行初始化,因为之后再也没有机会对它进行修改。
2.对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const。
3.在一个函数声明中,const可以修饰形参,表明是一个输入参数,在函数内部不能改变其值;
3、内存的分配方式的分配方式有几种?
(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
(2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
(3)从堆上分配,亦称动态内存分配。动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,频繁地分配和释放不同大小的堆空间将会产生堆内碎块。
4、进程和线程的区别
1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
2) 线程的划分尺度小于进程,使得多线程程序的并发性高。
3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
进程间通信方式有哪些?各自有哪些优缺点?
# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
# 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
# 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
# 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
# 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信
三.程序题
1.C语言库函数里是否有将字符串转化为数字的函数,若有则用自己的方式实现它。
Int myatoi(char *p)
{
Int flag = 0;
Int ret = 0;
If(*p == ‘-’)
{
Flag = -1;
}
If(*p == ‘+’)
{
Flag = 1;
}
If(*p == ‘+’ || *p == ‘-’)
{
P++;
}
While(*p != NULL)
{
Ret = ret* 10 + *p- ‘0’;
P++;
}
Return flag*ret;
}
2.编写一个程序,实现输出链表中倒数第K个结点
Void print_k(Link * head, int k)
{
int num = 0;
int i;
Link * p = head->next;
while(NULL != p)
{
num++;
p = p->next;
}
P = head;
for(i = 0;i < num - k+1; i++)
{
p = p->next;
}
printf(“%d : %c”,k, p->data);
}