笔试题(一)
2015-10-20 23:06
162 查看
华勤通讯: 驱动工程师笔试
1、 volatile 什么意思和作用
2、不开辟用于交换数据的临时空间,如何完成字符串的逆序
3、双向链表插入、删除操作
4、串行通信: 异步通讯 和 同步通讯 (两者区别)
1.同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
2.同步通信效率高;异步通信效率较低。
3.同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。
4.同步通信可用于点对多点;异步通信只适用于点对点。
5、还有头疼的 内存问题啦(GetMemory)
2、不开辟用于交换数据的临时空间,如何完成字符串的逆序
// str是数组名,它是一个常指针,所以地址固定,有右值,也就是a[0],即 a ,作为左值,但是不允许被赋值,不信,可以试一试啊,写一个 str='c';看看果然不行, str 相当于 &str 你这样看来看,怎么可以 把 'c' 赋值给 str(地址) 呢
对于异或操作,上面的看不懂,怎么就完成交换了呢??
当然 下面的 代码 更加简洁,明了
切记: main() 函数里面的 是 数组,可不能写成 指针 *p="abcdf" ;
面试经历:
问题:
1、推挽输出和开漏输出 区别
2、实时性操作系统 和 非实时操作系统区别
3、中断讲解
4、(0x11 || 0x00)==1 不是 0x11 ,尼玛真丢人啊,人家要你的理由是什么
1、 volatile 什么意思和作用
2、不开辟用于交换数据的临时空间,如何完成字符串的逆序
3、双向链表插入、删除操作
4、串行通信: 异步通讯 和 同步通讯 (两者区别)
1.同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
2.同步通信效率高;异步通信效率较低。
3.同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。
4.同步通信可用于点对多点;异步通信只适用于点对点。
5、还有头疼的 内存问题啦(GetMemory)
2、不开辟用于交换数据的临时空间,如何完成字符串的逆序
#include<stdio.h> #include<string.h> char * Reverse(char* s) // s 存放str本身地址的指针,s存储的值(右值)为 0x0012ff78 , { // s左值(地址)为 0x0012ff28 , 编译器为每个变量分配一个地址(左值) char* r = s ; // r左值(地址)为 0x0012ff1c 右值0x0012ff78 "abcdefg" 存储于变量中的值(它的右值) //令p指向字符串最后一个字符 char* p = s; // p 左值 0x12ff18 ,右值 0x12ff78 while (*(p + 1) != '\0') // 当 P+1 = '\0'的时,p 指向了 0x0012ff7e ‘g’,跳出循环。 ++p ; // 使用异或操作进行交换 while (p > s) { *p = *p ^ *s ; *s = *p ^ *s ; *p = *p-- ^ *s++ ; } return r ; } int main() { char str[] = "abcdefg"; printf("strSource=%s\n", str); Reverse(str); printf("strResult=%s \n", str); }
// str是数组名,它是一个常指针,所以地址固定,有右值,也就是a[0],即 a ,作为左值,但是不允许被赋值,不信,可以试一试啊,写一个 str='c';看看果然不行, str 相当于 &str 你这样看来看,怎么可以 把 'c' 赋值给 str(地址) 呢
对于异或操作,上面的看不懂,怎么就完成交换了呢??
当然 下面的 代码 更加简洁,明了
#include<stdio.h> #include<string.h> reverse(char *p); int main() { char a[]="ABCDEFGHIJ"; puts(a); reverse(a); puts(a); } /* 具体思路是这样的,首先指针指向数组a首地址,ptr 为字符串末尾地址,要考虑越界所以要 -1 */ reverse(char *p) { int i,j; char *ptr; char temp; i=strlen(p); ptr=p+i-1; // 这里开始写成 ptr=ptr+i,出现错误的, j=i; //易错点,这里我们可以好好看看 C primer plus P259 程序 清单10.11 for(j=0;j<(i/2);j++) // 如果i=10,j<5; // 哇,看了上面的代码 发现自己好SB { temp=*p; *p=*ptr; *ptr=temp; p + +; ptr - -; } }
切记: main() 函数里面的 是 数组,可不能写成 指针 *p="abcdf" ;
面试经历:
问题:
1、推挽输出和开漏输出 区别
2、实时性操作系统 和 非实时操作系统区别
3、中断讲解
4、(0x11 || 0x00)==1 不是 0x11 ,尼玛真丢人啊,人家要你的理由是什么
相关文章推荐
- 黑马程序员------java正则表达式
- 如何将Sql server2008改成Sql server身份登录
- iOS开发之单元测试
- 管道传递标准错误
- How Do I Target IE7 or IE8 Using CSS Hacks?
- 获取对象信息
- 错误: 非法字符: '\uff0c'
- Zookeeper 初体验之JAVA实例
- iOS开发中的单元测试(一)&(二)
- Excel 条件格式应用及原理
- 微软算法100题04 二叉树中查找和为某值的所有路径
- LeetCode OJ:Count and Say(数数)
- HA集群之一:HA Cluster基础理论及配置
- 数组作为函数参数时的使用注意
- CentOS配置本地yum源
- 更改百度云同步盘路径
- pct_free
- [Java] Struts2 - Validator 中文验证问题
- 小小菜之Cocos2d-x游戏开发旅程——项目实例:飞机大战(5)
- Android学习笔记-XML文件解析(一)