欢迎来到天天文库
浏览记录
ID:32179250
大小:52.50 KB
页数:5页
时间:2019-02-01
《c语言测试题及参考答案》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C语言测试题—参考答案(1~10题每题9分,11~16题每题10分,共计150分。请在答题纸上注明姓名及开始、结束时间)1.举例说明关键字static、const和volatile尽可能多的作用。static关键字至少有下列几个作用:1).函数体内static变量的作用范围为该函数体,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;2).在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;3).在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在
2、声明它的模块内;const关键字至少有下列几个作用:1).欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;2).对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;3).在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;volatile关键字至少有下列几个作用:一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设
3、这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1).并行设备的硬件寄存器(如:状态寄存器);2).一个中断服务子程序中会访问到的非自动变量;3).多线程应用中被几个任务共享的变量;2.请描述内存的分配方式及其区别,并编写一个函数为整型二维数组动态申请内存。1).从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。2).在栈上分配。在执行函数时
4、,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。3).从堆上分配,亦称动态内存分配。程序在运行的时候用malloc申请任意多少的内存,程序员自己负责在何时用free释放内存。动态内存的生存期由程序员决定,使用非常灵活,但问题也最多。intget_2d_mem(int***array2D,introws,intcolumns){ inti; if((*array2D=(int**)malloc(rows*sizeof(int*)))==NULL)
5、 return-1;/*notenoughmemory.*/ if(((*array2D)[0]=(int*)malloc(rows*columns*sizeof(int)))==NULL) return-1;/*notenoughmemory.*/ for(i=1;i6、线程“同时”调用的函数,并且能保证函数结果的正确性的函数。在编写可重入函数时通常要注意如下的一些问题:1).尽量不要使用全局变量,静态变量,如果使用了应该注意对变量访问的互斥。通常可以根据具体的情况采用信号量机制、关调度机制、关中断机制等方式来保证函数的可重入性。2).不要调用不可重入的函数,调用了不可重入的函数会使该函数也变为不可重入的函数。3).注意对系统中的临界资源、互斥资源的访问方式,防止使函数成为不可重入的函数。4).一般驱动程序都是不可重入的函数,因此在编写驱动程序时一定要注意重入的问题。4.下面定义的2个变量7、str1和str2有什么不同? char(*str1)[256]; char*str2[256];str1是一个数组指针,即指向数组的指针。str2是一个指针数组,其元素为指针型数据。5.一个单向链表,不知道头节点,一个指针指向其中的某一个节点,请问如何删除这个指针所指向的节点?将这个指针指向的next节点值copy到本节点,将next指向next->next,并随后删除原next指向的节点。6.在不使用第三个变量的情况下,用宏定义写出SWAP(x,y)。 #defineSWAP(x,y) x=x+y; 8、 y=x-y; x=x-y;方法二: #defineSWAP(x,y) x^=y; y^=x; x^=y;7.用宏定义实现32位整数x是否为2的若干次幂的判断。 #defineIS_POWER2(x)((x&(x-1))?0:1)8.写一个宏定义MAX(a,b),这
6、线程“同时”调用的函数,并且能保证函数结果的正确性的函数。在编写可重入函数时通常要注意如下的一些问题:1).尽量不要使用全局变量,静态变量,如果使用了应该注意对变量访问的互斥。通常可以根据具体的情况采用信号量机制、关调度机制、关中断机制等方式来保证函数的可重入性。2).不要调用不可重入的函数,调用了不可重入的函数会使该函数也变为不可重入的函数。3).注意对系统中的临界资源、互斥资源的访问方式,防止使函数成为不可重入的函数。4).一般驱动程序都是不可重入的函数,因此在编写驱动程序时一定要注意重入的问题。4.下面定义的2个变量
7、str1和str2有什么不同? char(*str1)[256]; char*str2[256];str1是一个数组指针,即指向数组的指针。str2是一个指针数组,其元素为指针型数据。5.一个单向链表,不知道头节点,一个指针指向其中的某一个节点,请问如何删除这个指针所指向的节点?将这个指针指向的next节点值copy到本节点,将next指向next->next,并随后删除原next指向的节点。6.在不使用第三个变量的情况下,用宏定义写出SWAP(x,y)。 #defineSWAP(x,y) x=x+y;
8、 y=x-y; x=x-y;方法二: #defineSWAP(x,y) x^=y; y^=x; x^=y;7.用宏定义实现32位整数x是否为2的若干次幂的判断。 #defineIS_POWER2(x)((x&(x-1))?0:1)8.写一个宏定义MAX(a,b),这
此文档下载收益归作者所有