列表

详情


阅读以下关于C语言及C代码的叙述,回答问题1至问题3,将答案填入答题纸的对应栏内。
【说明】
在开发某嵌入式系统时,设计人员根据系统要求,分别编写了如下三部分程序,其中:
【C代码1】是李工为了在嵌入式平台上开发一段可变参数函数,在X86平台上实现的一个参数个数可变函数实例。
【C代码2】是王工在编写软件时,自己编写的内存拷贝函数。
【C代码3】是赵工编写的一段数据处理的程序,其中fim( )的含义为从已创建的一个单向链表中查找倒数第index个结点。他的设计思路为:首先创建两个指针ptr2,ptr2,并且都指向链表头,然后ptr1向前走index步,这样ptr1和ptr2之间就间隔index个结点,然后ptr1和ptr2同时向前步进,当ptrl到达最后一个结点时,ptr2就是倒数第index个结点了。ReverseList()为赵工编写的对已有单向链表进行逆序重排的函数。





【问题1】(3分)
执行C代码1后,Sum的值应为多少?请用十进制表示。
【问题2】(7分)
请问C代码2中static的作用是什么?const的作用是什么?王工自己编写的内存拷贝函数安全吗?如存在缺陷,请指出缺陷在哪里。
【问题3】(5分)
仔细阅读并分析C代码3,填补其中的空(1)~(5)。

参考答案:

【问题1】
Sum=6
【问题2】
1)static的作用:是将变量修饰成静态变量,静态变量的存储地址在整个程序的运行执行期间均保留,不会被别的变量占据。
2)const的作用:是用于冻结一个变量,使其值在程序中不能被进一步改变。
3)不安全,有缺陷。
4)应对形参的有效性进行检查,应判形参dest、src指针是否为空,形参n是否大于0,还应保证dest所指向的内存空间不越界。
【问题3】
(1)ptr1=ptr1->next
(2)ptr2=ptr2->next
(3)ptr2
(4)temp2->next = tempi
(5)temp3 

详细解析:

本题考查嵌入式C语言编程基础知识。
static在C语言中主要是两种用法:
1、修饰局部变量
2、修饰函数和全局变量
static修饰局部变量时该变量是存放在静态存储区,生命周期是整个程序结束。static局部变量初次定义时就要初始化,且只能初始化一次。如果在定义的时候不初始化,编译器就会自动赋值为0;当static修饰全局变量或者函数时,不是为了限制其存储方式,而主要是为了限制该全局变量或者函数的作用域仅限于本文件,所以又称为内部函数。此时,对于外部(全局)变量,不论是否有static限制,它的存储区域都是在静态存储区,生存期都是全局的。此时的static只是起作用域限制作用,限定作用域在本模块(文)内部。
关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,const修饰符有以下的优点:1、预编译指令只是对值进行简单的替换,不能进行类型检查;
2、可以保护被修饰的东西,防止意外修改,增强程序的健壮性;
3、编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

上一题