嵌入式面试题(7)

2019-03-29 12:37

i++; if(i < j)

num[j--] = num[i];//把大于基准值放在右边 }

num[i] = temp;

quick_sort(num,start_num,i-1); quick_sort(num,i+1,end_num); } }

3、//二分擦找

int binary_search(int array[],int value,int size) {

int low=0,high=size-1,mid;

while(low<=high) //只要高低不碰头就继续二分查找 {

mid=(low+high)/2;

if(value==array[mid]) //比较是不是与中间元素相等 return mid;

else if(value > array[mid]) //每查找一次,就判断一次所要查找变量所在范围,并继续二分 low=mid; //如果大小中间值,下限移到中间的后一个位,上限不变,往高方向二分 else

high=mid; //上限移到中间的前一个位,往低方向二分 } return -1; }

/*双向循环链表插入函数*/

TYPE *insert_link(TYPE *head,TYPE *p_in) {

TYPE *p_mov = head,p_front = head;

if(head == NULL) {

head = p_in; p_in->next = head;

p_perior = head; } else {

while((p_in->[] > p_mov->[]) && (p_mov->next != head)) {

p_front = p_mov; p_mov = p_mov->next; }

if(p_in->[] <= p_mov->[]) {

if(head == p_mov) {

p_in->prior = head->prior; head->prior->next = p_in; p_in->next = p_mov; p_mov->prior = p_in; head = p_in; } else {

pf->next = p_in; p_in->prior = p_front; p_in->next = p_mov; p_mov->prior = p_in; } } else {

p_mov->next = p_in; p_in->prior = p_mov; p_in->next = head; head->prior = p_in; }

}

return head; }

/*双向链表删除函数*/

TYPE *delete_link(TYPE *head,int num) {

TYPE *p_mov = head,p_front = head;

if(head == NULL) printf(\link\\n\

while((p_mov->num != num) && (p_mov->next != head)) {

p_front = p_mov; p_mov = p_mov->next; }

if(p_mov->num == num) {

if(p_mov == head) {

if(p_mov->next == head && p_mov->prior == head) { free(pb); head =NULL; return head; }

head->next->prior = head->prior; head->prior->next = head->next; head = head->next; } else {

p_front->next = p_mov->next; p_mov->next->prior = p_front; }

free(p_mov);

printf(\node is delete\\n\ } else {

printf(\node not been found\\n\ }

return head; }

1、sizeof与strlen的区别

(1)、sizeof是运算符,strlen是函数

(2)、strlen只能用char*做参数,且必须是以''\\0''结尾的,而sizeof可用类型做参数,还可用函数做参数,如: int sum();

printf(\输出的结果是sizeof(int),即4。 (3)、数组做sizeof的参数不退化,传递给strlen就退化为指针了。

(4)、大部分编译程序,sizeof在编译时确定,因此sizeof(x)可以用来定义数组维数;而strlen要在运行时才能计算出来,用来计算字符串的长度,而不是类型占内存的大小;

char str[20]=\ int len1=strlen(str); //len1=10; int len2=sizeof(str); //len2=20;

(5)、sizeof后,若为类型必须加括弧,若为变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。

(6)、当适用于一个结构类型时或变量,sizeof 返回实际的大小;当适用一静态地空间数组,sizeof归还全部数组的尺寸。

sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸;

(7)、数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,

如: fun(char [8]) fun(char [])

都等价于 fun(char *)

在C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小,如果想在函数内知道数组的大小, 需要这样做:

进入函数后用memcpy拷贝出来,长度由另一个形参传进去

fun(unsiged char *p1, int len) {

unsigned char* buf = new unsigned char[len+1] memcpy(buf, p1, len);

}

常在用到 sizeof和 strlen的时候,通常是计算字符串数组的长度,如果是对指针,结果则会不一样的:

char* str = \

sizeof(str)//结果 4 --->str是指向字符串常量的字符指针,sizeof 获得的是一个指针所占的空间,应该是长整型的,所以是4;

sizeof(*str) //结果 1 --->*str是第一个字符,其实就是字符串的第一位'a' 所占的内存空间,是char类型的,占了 1 位;

strlen(str)= 5 //--->若要获得这个字符串的长度,则一定要使用strlen

2、使用C语言的宏定义

(1)、宏定义给某个数bit3置位和清零

#define SET(a,b) a|(0x1<

#define CLR(a,b) a&(~(0x1<

(2)、宏定义一个求两个数最小值的函数 #define MIN(A,B) ((A)>(B))?B:A

不能使用大于、小于、if语句

#definemax(a,b) (((a)-(b))&(1<<31))?(b):(a) #define max(a,b) (a-b)==abs(a-b)?a:b

#define max(a,b) ((((long)((a)-(b)))&0x80000000)?(b):(a))

(3)、宏定义交换两个数:

#define SWAP (a,b) {a=a+b; b=a-b; a=a-b; }

3、程序编译的过程


嵌入式面试题(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:实验室生物安全测试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: