C语言笔试题-1

第一题.#include <stdio.h>
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 <stdio.h>
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
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值