C语言测试题答案
C语言钻石段位测试题见此链接:https://blog.csdn.net/qq_23274715/article/details/106302027
- 常数
123ul
,123.45l
中的ul
、l
代表什么含义?(2分)- 答案:这属于数值后缀的知识点。具体请参看数值常量后缀相关介绍
- C语言中,数值16用十六进制表示为
0x10
,哪用二进制如何表示?(2分)- 答案:
0b10000
.具体请参看数值常量后缀相关介绍
- 答案:
- 举例谈谈
#define Mul(x,y) x*y
这个带参宏的缺点?(2分)- 答案:如果使用Mul(3+5,6).得到的结果则为
3 + 5*6 = 33
.和我们的预期不一致。所以定义带参宏时多用要用()
。如应该使用#define Mul(x,y) (x)*(y)
。
- 答案:如果使用Mul(3+5,6).得到的结果则为
- 谈谈
#undef
预处理命令的应用。(2分)- 答案:取消之前定义的宏。可以用这个预处理命令来修改宏的值。具体请参看预处理指令使用
- 谈谈
#if
,#ifdef
,#ifndef
的使用区别。(2分)- 答案:这是预处理命令的应用。具体请参看预处理指令使用
- 如果编译时,不满足某些条件,用户如何向编译器抛出警告或者错误。(2分)
- 答案:使用预处理命令
#error
,#warning
。具体请参看预处理指令使用
- 答案:使用预处理命令
- 谈谈函数指针的用途?(5分)
- 答案:常用于函数回调等。具体请参看弱函数与回调函数在模块化编程中的使用
- 谈谈弱函数的用途?(5分)
- 答案:具体请参看弱函数与回调函数在模块化编程中的使用
volatile
关键字的行为发生在哪个阶段?(编译还是运行?).(5分)- 答案:编译阶段。体现在汇编代码中。具体请参看volatile关键字的使用你真的了解吗?
- 从函数、变量、作用范围角度谈谈
static
,extern
.(5分) - 什么是可重入函数,什么是不可重入函数?(5分)
- 答案:具体请参看可重入函数和不可重入函数
- 编写一个判断处理器为大端还是小端的函数(大端返回1,小端返回0)。(3分)
- 大小端的介绍和判断函数。见处理器的大小端模式
- 编写一个给二维数组
uint8_t data[4][8]
分配内存的函数。(5分)- 函数见此链接。给二维数组分配空间
- 编写一个变参函数,实现类似
printf()
功能。(5分)- 答案:首先需要知道什么是变参函数。具体请参看C语言的变参函数
- 编写一个变参调试宏
debug()
。可以完成下面的打印控制。(5分)- 这涉及到了变参宏相关的知识点。具体请参看c语言中的变参宏
#define debug(MY_DEBUG_ENABLE,...) do{ \ if(MY_DEBUG_ENABLE > 0){ \ printf(__VA_ARGS__); \ } \ }while(0)
- 下面的这段程序,打印结果是什么?(5分)
- 答案:
a>b
.具体请参看c语言中数据类型的自动转换原则
- 答案:
- 在
32bit
的小端
处理器上,下面的两个结构体各占多大内存,请画出内存分布图。(5分)- 答案:具体请参看C语言字节对齐介绍
- 下面两个函数中使用
const
有何好处。(5分)- 答案:具体请参看const关键字的用法
- 下面程序函数WaitThread()中的循环能跳出吗?为什么?(5分)
- 答案:如果使用优化编译。跳不出。具体请参看volatile关键字的使用你真的了解吗?
- 下面程序中
***p5
中的内容是什么?(5分) - 分析下面程序的打印结果。(5分)
- 答案输出如下。详细使用请参考C语言中字符串拼接之#,##的妙用:
guoweilkd,“guoweilkd”,12
guoweilkd123
- 答案输出如下。详细使用请参考C语言中字符串拼接之#,##的妙用:
- 在下面程序中使用
sprintf()
函数将一个浮点数转换为字符串.其中浮点数的小数位由输入参数决定。(5分)- 答案:
sprintf()
具体的格式化字符串可以参看printf函数使用大全.
char *GetfloatStr(char *pBuff,float value,int nbit){ sprintf(pBuff,"%.*f",nbit,value); return pBuff; }
- 答案:
- 下面程序的
__attribute__
属性有什么作用。(5分)- 答案:这是一个有关编译、链接的问题。具体请参看c编程----段定义的使用
关于技术交流
此处后的文字已经和题目内容无关,可以不看。
qq群:825695030
微信公众号:嵌入式的日常
如果上面的文章对你有用,欢迎打赏、点赞、评论。