嵌入式软件笔试基础

前言:面试中,有些公司会先有笔试,有些同学没温习,很容易忘记写不出了。下面总结一下(个人笔试经验)

重中之重:熟悉自己所做过的项目。

笔试基础:

1、(void (*)( )) ,是一个返回值为void,参数为空的函数指针原型。
题目:C语言跳转到指定地址执行?如跳转到0x100000这个地址执行。

Uint32 addr = 0x100000;
static void (*p)(void); //定义一个函数指针
//将制定地址强制转换为不带参数不带返回值的值函数指针。
p= (void (*)(void)) addr;
(*p)();

写成这样也可以:
typedef void(*)(void) fucktoAddr;
(*(fucktoAddr)0x100000)();

2、函数指针、指针函数、指针数组、数组指针。
int *a[10]; //指向int类型的指针数组a[10]
int (*a)[10]; //指向有10个int类型数组的指针a
int (*a)(int);//函数指针,指向有一个参数并且返回类型 均为int的函数
int (*a[10])(int); //函数指针的数组,指向有一个参数并且返回类型均为int的函数的数组。

3、UDP和TCP的区别。
TCP需要建立连接,安全可靠,UDP反之。
TCP传输方式为字节流,UDP是报文。
TCP应用于文件传输等可靠传输场景,UDP应用于IP电话、视频、直播等

4、去看一下Socket网络编程PPT和自己的“网络经典问题”博文

5、大小端序。
0x12345678
小端序:0x12345678 //数据高地址存在内存中高地址 小高高
大端序:0x78563412 //数据高地址存在内存中低地址
网络字节序为大端序

6、局部变量存在栈、全局变量存在静态区、申请内存变量存在堆。

7、单向链表逆序。

链表数据结构:
struct ListNode {
int val;
ListNode *next;
};

ListNode* reverseList(ListNode* head) {
ListNode *cur = head;
ListNode *tmp, *prev = NULL;
while (cur)
{
tmp = cur->next;
cur->next = prev;
prev = cur;
cur = tmp;
}
return prev;
}
https://www.jianshu.com/p/8b6f4dbe497e

8、一个数的某一位置1或者0
//编写函数,将一个数的指定位置置0或置1

#include <stdio.h>
unsigned int set_bit(unsigned int num, int pos, int flag)
{
	int n = 1;
	n = n << (pos - 1);    //将n的第pos位置1,其它全为0
	if (flag == 0)
	{
		num = num&(~n);
	}
	else if (flag == 1)
	{
		num = num | n;
	}
	else
		printf("flag error\n");
	return num;
}
int main()
{
	printf("%d\n", set_bit(3,1,0));     //2
	printf("%d\n", set_bit(4, 2, 1));   //6
	printf("%d\n", set_bit(15, 5, 1));  //31
	return 0;
}

用宏可以这样写:

//value:值,pos:第几位,flag:置1还是置0
#define M(value, pos, flag)  do{  \
								if(flag == 1) \
									value |= (1<<(pos-1)); \
								else if(flag == 0) \
									value &=  ~(1<<(pos-1)); \
								}while(0)

或者

#define M(value, pos, flag) (flag)? (value |= (1<<(pos-1))) : (value &= ~(1<<(pos-1)))

持续更新中~

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值