第一题.#include
int main()
{
unsigned int a = 0xfffffff7;
unsigned char i = (unsigned char)a;
char *b = (char *)&a;
printf("%08x, %08x", i, *b);
return 0;
}
输出结果:000000f7,fffffff7
第二题、用一个表达式,判断一个数X是否是2的N次方(N=1,2,3.。。。),不可以使用循环语句。
解析:2,4,8,16这样的数转化为二进制是10,100,1000,10000.如果X减去1后与X做与运算,答案如果是0,则X是2的N次方。
答案:!(X&(X-1))
第三题、如果将a、b两个值进行交换,并且不是使用中间变量?
答案:a=a^b; b=a^b; a=a^b
第四题、const和#define定义变量的区别。
答案:const常量有数据类型,而宏常量没有数据类型,编译器会对前者进行安全检查,对后者则不会
第五题、如果要修改常对象中的成员,需要使用mutable来修饰
第六题、一个空类占一个字节,继承后的空类还是占一个字节,虚继承因为涉及到虚表(需指针),所以虚继承的空类会占4个字节
第七题、写出下面程序的输出结果
int a[]={1,2,3,4,5};
int *ptr = (int *)(&a+1);
printf("%d,%d", *(a+1), *(ptr-1));
注意这里a 本身就是指针了,&a就是双重指针了
所以输出结果就是2,5
第八题、中断处理函数需要注意的
(1)ISR不能返回一个值,不能传递参数,一般不能做浮点运算,不能调用printf()带有重入和性能上的问题
第九题 volatile主要是防止编译器优化,因为有些场合不能优化,常见用处:
1.并行设备的状态寄存器
2.一个终端服务子程序会访问到的非自动变量
3.多线程应用中被多个任务共享的变量
一个参数既可以是可以同时使用const和volatile来修饰的,如只读的状态寄存器
第十题、关键字static的作用是什么?
(1)函数体内是static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值
(2)在模块内的static全局变量可以被模块内所有函数访问,但不能被模块外其他函数调用
(3)在模块内的static函数只可被这一模块内的其他函数调用,这个函数的使用范围被限制在声明为它的模块内
(4)在类中的static成员函数属于整个类所拥有,对类的所有对象只有一份拷贝
(5)在类中的static成员函数属于整个类所有,这个函数没有this指针
第十一题、找个一个不知节点数N的链表的中间节点
答案:使用两个指针移动,一个每次移动2个节点,一个移动一个节点
第十二题。实现strcpy函数
char *strcpy(char *strDest, const char *strSrc)
{
assert((strDest != NULL) && (strSrc!= NULL));
char *address = strDest;
while ((*strDest++ = *strSrc++) != '\0');
return address ;
}
}
第十二题、new和delete不是库函数,是运算符
第十三题、求下面输出结果
#include
typedef struct
{
int a:2;
int b:2;
int c:1;
}test;
int main()
{
test t;
t.a=1;
t.b=3;
t.c=1;
printf("t.a = %d, t.b = %d, t.c = %d \n", t.a, t.b, t.c);
return 0;
}
答案:1、-1、1
阅读(554) | 评论(0) | 转发(0) |