vlambda博客
学习文章列表

C语言测试题--进阶钻石段位篇


C语言测试题--进阶钻石段位篇

满分100分的测试题,你能做多少分?

  1. 常数123ul,123.45l中的ull代表什么含义?(2分)

  2. C语言中,数值16用十六进制表示为0x10,哪用二进制如何表示?(2分)

  3. 举例谈谈#define Mul(x,y) x*y这个带参宏的缺点?(2分)

  4. 谈谈#undef预处理命令的应用。(2分)

  5. 谈谈#if,#ifdef,#ifndef的使用区别。(2分)

  6. 如果编译时,不满足某些条件,用户如何向编译器抛出警告或者错误。(2分)

  7. 谈谈函数指针的用途?(5分)

  8. 谈谈弱函数的用途?(5分)

  9. volatile关键字的行为发生在哪个阶段?(编译还是运行?).(5分)

  10. 从函数、变量、作用范围角度谈谈static,extern.(5分)

  11. 什么是可重入函数,什么是不可重入函数?(5分)

  12. 编写一个判断处理器为大端还是小端的函数(大端返回1,小端返回0)。(3分)

  13. 编写一个给二维数组uint8_t data[4][8]分配内存的函数。(5分)

  14. 编写一个变参函数,实现类似printf()功能。(5分)

  15. 编写一个变参调试宏debug()。可以完成下面的打印控制。(5分)

    //可以通过宏控制是否有打印输出#define MY_DEBUG_ENABLE 1void main(void){ debug(MY_DEBUG_ENABLE,"hello word\n"); debug(MY_DEBUG_ENABLE,"%d\n",1);}
  16. 下面的这段程序,打印结果是什么?(5分)

    void main(void){ int32_t a = -10; uint32_t b = 5;
    if(a > b){ printf("a>b\n"); } else{ printf("a<=b\n"); }}
  17. 32bit小端处理器上,下面的两个结构体各占多大内存,请画出内存分布图。(5分)

    struct Base1{ int a1; long a2; char a3;};struct Base2{ int a1; struct Base1 a2; char a3;};
  18. 下面两个函数中使用const有何好处。(5分)

    int Sum(const int *pBuff,int num){
    }
    void Test(void){ const uint8_t IdOffset = 16;}
  19. 下面程序函数WaitThread()中的循环能跳出吗?为什么?(5分)

    char DataReg;
    /* 等待线程 */void WaitThread(void){ DataReg = 1; while(DataReg){ }}/* 其他线程 */void OtherThread(void){ DataReg = 0;}
  20. 下面程序中***p5中的内容是什么?(5分)

    void main(void){ /* []中的值为地址中的内容,如 0x0000 [10] 为地址 0x0000中的内容10 */ int a = 10; //分配地址 0x0000 [10] int *p1 = &a; //分配地址 0x0004 [0x0000] int **p2 = &p1; //分配地址 0x0008 [0x0004] int ***p3 = &p2; //分配地址 0x000c [0x0008] int ****p4 = &p3; //分配地址 0x0010 [0x000c] int *****p5 = &p4; //分配地址 0x0014 [0x0010]
  21. 分析下面程序的打印结果。(5分)


    #define TO_STRING(str) #str#define TO_CONNECT(arg1,arg2) arg1##arg2#define TO_CONNECT_STRING(arg1,arg2) TO_STRING(arg1##arg2)
    void main(void){ char *pstr = TO_STRING(guoweilkd); char *pstr1 = TO_STRING("guoweilkd");
    int value = TO_CONNECT(1,2);
    printf("%s,%s,%d\n",pstr,pstr1,value);
    char *pstr2 = TO_CONNECT_STRING(guoweilkd,123); printf("%s\n",pstr2);}
  22. 在下面程序中使用spritf()函数将一个浮点数转换为字符串.其中浮点数的小数位由输入参数决定。(5分)

    char *GetfloatStr(char *pBuff,float value,int nbit){ //user code}
  23. 下面程序的__attribute__属性有什么作用。(5分)

    static int b __attribute__((section(".endaddr")));uint32_t __attribute__((section(".endaddr"))) ProgramEndAddr(void){return (uint32_t) ProgramEndAddr;}

做完了吗?感觉怎么样?答案见链接。https://blog.csdn.net/qq_23274715/article/details/106302128(百度C语言钻石段位测试题答案)。


关于技术交流