2、找错
DSN get_SRM_no() |
这里for循环的判断语句是后来我加上的,估计在网上流传的时候被人给弄丢了,根据对程序的分析,给补上了。估计错误应该不是这儿。
简单的阅读一下这个函数,可以大概的可以猜测出这个函数的功能是分配一个空闲的SRAM块。方法:从上次分配的RAM块后的RAM块开始检测SRAM每个RAM块,看是否是IDLE状态,如果是IDLE则返回当前的RAM块的号SRM_no.如果所有的RAM块都不是IDLE状态,则意味着无法分配一个RAM给函数调用者,返回一个表示没有RAM可分配的标志(NULL_SRM)。
经过上面的分析,则这里可以知道,这个函数的错误是for循环里面没有给SRM_no这个变量累加1.
3、写出程序运行结果
int sum(int a) |
运行结果是:8,10,12,14,16,
在求和函数sum里面c是auto变量,根据auto变量特性知每次调用sum函数时变量c都会自动赋值为0.b是static变量,根据static变量特性知每次调用sum函数时变量b都会使用上次调用sum函数时b保存的值。
简单的分析一下函数,可以知道,若传入的参数不变,则每次调用sum函数返回的结果,都比上次多2.所以答案是:8,10,12,14,16,
4、func(1) = ? |
在 case 语句中可能忘记了对变量b赋值。如果改为下面的代码:
int func(int a) |
因为case语句中漏掉了break语句,所以无论传给函数的参数是多少,运行结果均为0.