嵌入式面试题

发布时间:2016-12-10 14:52:27 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"嵌入式面试题",主要涉及到嵌入式面试题方面的内容,对于嵌入式面试题感兴趣的同学可以参考一下。

1. main(){  int a[5] = {1,2,3,4,5};  int *ptr = (int*)(&a+1);  printf("%d %d" , *(a+1), *(ptr-1) ); } 这段程序的输出是: (a) 2 2 (b) 2 1 (c) 2 5 (d) 以上均不是 2.考查自加操作(++) main(){  int i=3;  int j;  j = sizeof(++i+ ++i);  printf("i=%d j=%d", i ,j); } 这段程序的输出是: (a) i=4 j=2 (b) i=3 j=2 (c) i=3 j=4 (d) i=3 j=6 3.此题考查的是C的变长参数 #include<stdarg.h> int ripple ( int , ...); main(){  int num;  num = ripple ( 3, 5,7);  printf( " %d" , num);} int ripple (int n, ...){  int i , j;  int k;    va_list p;   k= 0;   j = 1;   va_start( p , n);        for (; j<n; ++j)   {       i = va_arg( p , int);        for (; i;    i &=i-1 )     ++k;      }     return k; } 这段程序的输出是: (a) 7 (b) 6 (c) 5 (d) 3 1.(c) a的类型是一个整型数组,它有5个成员 &a是指向数组的指针 ptr指针,即&a+1实际指向a[6]。ptr-1之后,指向a[5]。 2.(b) sizeof 操作符给出其操作数需要占用的空间大小,它是在编译时就可确定的,所以其操作数即使是一个表达式,也不需要在运行时进行计算.( ++i + ++ i )是不会执行的,所以 i 的值还是3 3. (c) 在C编译器通常提供了一系列处理可变参数的宏,以屏蔽不同的硬件平台造成的差异,增加程序的可移植性。这些宏包括va_start、 va_arg和va_end等。 采用ANSI标准形式时,参数个数可变的函数的原型声明是: type funcname(type para1, type para2, ...) 这种形式至少需要一个普通的形式参数,后面的省略号不表示省略,而是函数原型的一部分。type是函数返回值和形式参数的类型。 不同的编译器,对这个可变长参数的实现不一样 ,gcc4.x中是内置函数. 关于可变长参数,可参阅 http://www.upsdn.net/html/2004-11/26.html http://www.upsdn.net/html/2004-11/24.html 程序分析 va_list p;                 /*定义一个变量 ,保存 函数参数列表 的指针*/ va_start( p , n);     /*用va_start宏 初始化 变量p, va_start宏的第2个参数n , 是一个固定的参数, 必须是我们自己定义的变长函数的最后一个入栈的参数,也就是调用的时候参数列表                                里的第1个参数*/ for (; j<n; ++j)      /* j从1开始,   遍历所有可变参数 */ {     i = va_arg( p , int);      /*va_arg取出当前的参数,  并认为取出的参数是一个整数(int) */      for (; i;    i &=i-1 )      /*判断取出的i是否为0*/                ++k;                              /* 如果i不为0,   k自加, i与i-1进行与逻辑运算, 直到i 为0,为了获得i用二进制表示时,其中二进制1的总个数*/ } 当我们调用ripple函数时,传递给ripple函数的 参数列表的第一个参数n的值是3 . va_start 初始化 p,指向第一个未命名的参数(n是有名字的参数) ,也就是 is 5 (第一个). 每次对 va_arg的调用,都将返回一个参数,并且把 p 指向下一个参数. va_arg 用一个类型名来决定返回的参数是何种类型,以及在 var_arg的内部实现中决定移动多大的距离才到达下一个 参数 (; i; i&=i-1) k++        /* 计算i有多少bit被置1 */ 5用二进制表示是 (101) 2 7用二进制表示 (111) 3 所以 k 返回 5(2+3),也即本题应该选c

上一篇:apache 集成多个tomcat的方法
下一篇:解决ScrollView下嵌套ListView进页面不在顶部的问题

相关文章

关键词: 嵌入式面试题

相关评论