嵌入式笔试刷题专栏(第二天)

11.请你定义如下几种函数,函数没有形参,但是有返回值类型,返回值类型(只要类型符合要求就行)要求如下

返回函数指针

int (*func1(void))(void);

返回指针数组

int *(*func2(void))[3];

返回数组指针

int (*func3(void))[5];

返回函数数组指针

int (*(*func4(void))[2])(int);

11. 定义函数:

  • 返回函数指针的函数:
  • 返回指针数组的函数:
  • 返回数组指针的函数:
  • 返回函数数组指针的函数:

12.const char *a;

  const *char a;

  char *const a;   有什么不同

12. const 用法区别:

  • const char *a;:指向常量字符,不能通过 a 修改内容。
  • const *char a;语法错误
  • char *const a;:常量指针,指针本身不能修改,内容可以改。

13.#define CALC(x,y)  x*y+x

   int main()

   {

       int  a=CALC(2*3,3+2);

       printf(result=%d\n,a);

       return 0;

}

13. 宏展开结果:

#define CALC(x,y)  x*y+x
int a = CALC(2*3, 3+2); // 实际变为 2*3*3+2 = 18 + 2 = 20

输出:result=20

14分析如下写法的含义

第一题: void *(*(p)(int))[10];

                         函数名:p是函数名字

                         函数的形参: int

                         函数的返回值:void *[10]   返回的是一个指针数组

          第二题: float (*(*p)(int,int,float))(int);

                         p是函数指针的名字

                         p指向的函数指针,参数是int,int,float

                         p指向的函数指针,  返回值类型是float  (int),返回值也是个函数指针

          第三题:typedef double (*(*(*p)())[10])();

                         p是函数指针的名字

                         p指向的函数指针,参数是空的

                         p指向的函数指针,返回值是double *[10]()   返回值是函数指针数组

          第四题:int (*(*p())[10])();

                         函数名:p

                         函数的形参:空的

                         函数的返回值:int *[10]()    返回值是函数指针数组

14. 复杂声明分析:

  • 第一题:p 是函数,参数为 int,返回 void * 指针数组。
  • 第二题:p 是函数指针,返回值是函数指针,参数为 int,返回 float。
  • 第三题:p 是函数指针,返回指向包含10个 double() 函数指针的数组。
  • 第四题:p 是

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式笔试专栏 文章被收录于专栏

本专栏系统整理了嵌入式方向笔试中常见的知识点和高频考题,涵盖基础理论、常用算法、C语言陷阱、操作系统原理、驱动开发、常见外设通信协议(如 I2C/SPI/UART)、RTOS、Linux 内核、以及实用电路知识等内容。

全部评论
接好运
点赞 回复 分享
发布于 04-25 21:45 黑龙江
点赞 回复 分享
发布于 04-25 21:38 山西
😄😄😄😄
点赞 回复 分享
发布于 04-25 16:23 上海
首先感谢博主无私分享! 关于第 18 题: #include <stdio.h> void merge (char *d, int size,char* s1,char* s2){ while ( *s1 != 0 && *s2 != 0){ if (*s1 < *s2) *d++ = *s1++; else *d++ = *s2++; } while ( *s1 != 0 ) *d++ = *s1++; while ( *s2 != 0 ) *d++ = *s2++; *d = '\0'; } int main(void) { char s1[]="acmghn",s2[]="bcfhi",s3[20]; memset(s3,0,sizeof(s3)); merge(s3,sizeof(s3)-1,s1,s2); puts(s3); return 0; } 做出上述语法修改,但答案应该是:abccfhimghn</stdio.h>
点赞 回复 分享
发布于 04-25 15:16 山东

相关推荐

07-03 11:02
中山大学 C++
字节刚oc,但距离九月秋招很近了有两段互联网实习,非腾讯字节。不敢赌转正,现在在纠结去还是不去如果实习俩月离职会有什么后果吗
阿城我会做到的:不去后悔一辈子,能否转正取决于ld的态度,只要他不卡,答辩就是走流程,个人觉得可以冲一把
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
评论
5
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务