Chinaunix首页 | 论坛 | 博客
  • 博客访问: 863226
  • 博文数量: 156
  • 博客积分: 6553
  • 博客等级: 准将
  • 技术积分: 3965
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-22 18:36
文章存档

2012年(3)

2011年(43)

2010年(110)

分类: C/C++

2010-10-17 19:09:21

第一题.#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
 
 
阅读(557) | 评论(0) | 转发(0) |
0

上一篇:巧用C语言中预处理

下一篇:存储器

给主人留下些什么吧!~~