【C语言】[笔试题]:常见笔试题

1.关键字 static 的作用
答:
(1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
(2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;

2.写一个宏定义,完成功能:输入一个天数,得到这些天总共有多少秒。
答:#define GET_DAYS_SECOND(X) ((x)*24*60*60)UL

3.假设在MDK-ARM编译器中,编写一段代码,要求设置一绝对内存地址0x4455为整型值0x88AA
答:题意:1.一个绝对地址是:0x4455;2.地址上的值为整形值0x88AA;
方法一:

     int *p;             //定义一个整形指针
     p = (int *)0x4455;  //将绝对地址强制转换为整形指针类型
     *p = 0x88AA;        //将整形数存放在P指向的绝对地址中

方法二:

 *(int *)0x4455 = 0x88AA;//直接强制转换再赋值

4.请找出下面C51的UART1中断函数中,你认为的几个错误:(用笔圈出,并加以解释)

int UART1_Interrupt (unsigned char *temp_array) interrupt 20
{   
    static  unsigned char temp_data=0,i = 0;    
    if(RI1 == 1)
    {
        temp_data = SBUF1; //接收数据   
        if(temp_data == temp_array[i])
        {
            WireCollTerminalSensorData(); //终端传感器数据接收处理分析函数    
            return temp_data; 
        }
        else
        {
            return temp_array[i];
        }
    }
    if(TI1 == 1) //发送数据
    {
         SBUF1 = temp_array[i]; 
    }
} 

答:
1)中断函数不能有返回值,不能有参数
2)最好不要在里面做复杂运算
3)最好不要在里面定义变量
4)没有清除标志位

5.写出下面的结果

unsigned char foo(void) 
{          
    unsigned int a = 6;          
    signed int b = -20;          
    if(a > b)   {return 1; }
    else        {return 0; }
 } 

答:return 0;
解析:无符号数和有符号数之间的运算时,会自动将有符号数转换为无符号数。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值