大家放松一下做几道面试题!

lg7412374123   2008-8-21 20:54 楼主
1
int a;
int *p;
p=&a;
*p=0x500;
a=(int)(*(&p));
a=(int)(&(*p));
if(a==(int)p)
printf("equal!");
else
printf("not equal!");
输出什么?

2
void foo(void)
{
        unsigned int a=6;
        int b=-20;
        ((a+b)>6) puts(">6"):puts("<=6");
}
输出什么

3
wince是否为RTOS?

4
举例说明WINCE下采用线程同步机制

5
在某工程中,设置绝对地址为0x67a9的整形变量为0xaa66

6
一个整形a 写两段代码 第一个设置a的bit3  第二个清a的bit3


7
_interrupt double compute_area(double radious)
{
   double area=PI*radious*radious;
   printf("area=%f",area);
   return area;
}
找出错误


8
volatile 的含义
指出三个应用实例

回复评论 (11)

1. equal
2.>6
5.(int*)0x67a9 = 0xaa66
6.a|=(1<3);a^=~(1<3);
7.中断函数没有返回值;中断函数不能传递参数;printf函数不可重入;不能用在中断函数中;
8.volatile表示变量是不稳定的,随时可能发生变化,比如某端口接收的数据,双端口缓存中的数据等都应定义为volatile。

wince不熟悉。
点赞  2008-8-21 22:06
观望中
点赞  2008-8-21 22:11
1
int a;
int *p;
p=&a; //送地址
*p=0x500;//赋值
a=(int)(*(&p));//获取指向p指针地址的值 =a。。。。
a=(int)(&(*p));//获取p的值 =a。。。。
if(a==(int)p)
printf("equal!");
else
printf("not equal!");
所以。。。。两个都应该是a,等于

2
void foo(void)
{
unsigned int a=6;
int b=-20;
((a+b)>6)//-14转下一定比6大
puts(">6"):puts(" <=6");//》6
}

3
wince是否为RTOS? 实时操作系统RTOS


4
举例说明WINCE下采用线程同步机制
.............进程锁?

5
在某工程中,设置绝对地址为0x67a9的整形变量为0xaa66
long p = 0x67a9
*p = 0xaa66

6
一个整形a 写两段代码 第一个设置a的bit3  第二个清a的bit3
int a ;
第一个设置a的bit3?设置成什么?
第二个清a的bit3 a|11111101 ...不懂了。。。

7
_interrupt double compute_area(double radious)//error
{
  double area=PI*radious*radious;//error
  printf("area=%f",area);
  return area;//error
}
1.interrupt中断里不能带返回
2.貌似记得中断好像不能带浮点参数,c语言嵌入式修炼里面讲过。。忘记了。。。。汗

8
volatile 的含义
指出三个应用实例
volatile是可变变量定义。c语言嵌入式修炼也讲过。。。。。也忘记了- -汗

点赞  2008-8-22 08:46
lz哪里是让我们放松。。。越做越一身冷汗。。。。以前看过的东西全忘光了。=- =
点赞  2008-8-22 08:49
貌似不是很复杂啊。
点赞  2008-8-22 08:58
一些常规问题没看都忘记了。
点赞  2008-8-22 09:14
还是有用的
点赞  2008-8-22 10:31
第2题结果 >6
为什么??
点赞  2008-8-22 14:41
-14要转换进行比较的,有unsigned int 和 int 加减问题
你可以写程序看看设置个断点
其实不是-14,是4294967282。。。。。16进制的
应为是unsigned int。。。。
#include "stdafx.h"
#include "windows.h"

int _tmain(int argc, _TCHAR* argv[])
{
        long i = 1;
        unsigned int c=6;
        int b=-20;
//unsigned int a = (c+b); >
   int a = (c+b);  //<=
        if(a>6)
                printf("%d>6",a);
        else
                printf(" %d<=6",c+b);
        Sleep(2000);
}
你自己实验下吧
点赞  2008-8-22 16:38
可是我用
printf("%d",a+b);
怎么输出的是-14?????
点赞  2008-8-22 16:57
我不是解释了吗?无符号和有符号的区别。。
你的a是int型的吧。。。这个自己做做实验印象会更深的
点赞  2008-8-23 08:09
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复