嵌入式软件工程师面试(1)

1、int a[10]={1,2,3,4,5,6,7,8,9,0};
   int *p=&a[1];
   则p[6]等于8


2、整数数组清零

  • bzero函数

函数原型:void bzero(void *s, int n);
功能:将字符串s的前n个字节置为0,一般来说n通常取sizeof(s),将整块空间清零。

char str[10];
bzero( str, sizeof(str) );

或者:

struct node
{
    char a;
    int str[4];
    double b;
};

struct node Test;
bzero( &Test, sizeof(Test) );
  • memset函数

函数原型:void *memset(void *s,int c,size_t n);
功能:将s中前n个字节替换为c并返回s

//同上将str清零:
memset( str,0,sizeof(str) );

//将上面的Test变量清零:
memset( &Test,0,sizeof(Test) );

3、sizeof() 与strlen()

  • strlen()

strlen()是函数,用于计算字符串数组的实际长度(到‘\0’结束,不包含‘\0');strlen只能用于计算char *a或char a[]格式的。

#include <stdio.h>
#include <string.h>

int main(int argc,char **argv)
{

	char a[10];   //未初始化,长度不确定
	char b[10]={};  //初始化为’空,NULL;长度为0,
	char c[10]="abc";  //遇到’\0‘结束,实际长度为3
	char d[10]="abc\0def";   //遇到’\0‘结束,实际长度为3
	char *e="abc";  //遇到’\0‘结束,实际长度为3
	
	printf("%d\n%d\n%d\n%d\n%d\n",strlen(a),strlen(b),strlen(c),strlen(d),strlen(e));
	return 0;
}
  • sizeof

sizeof是操作符,计算的是所占内存的实际长度,单位是字节,可用于常量,变量,数据类型,函数,sizeof是基于数据类型来计算长度的。

#include <stdio.h>
#include <string.h>

int main(int argc,char **argv)
{
	char a[10];      //char类型长度为1,包含10个char类型的数组长度为10
	char b[10]={};
	char c[10]="abc";
	char d[10]="abc\0def";
	char *e="abcde";

	printf("%d\n%d\n%d\n%d\n%d\n",sizeof(a),sizeof(b),sizeof(c),sizeof(d),sizeof(e));
	return 0;
}

注意:
sizeof是操作符,计算的是所占内存的实际长度,单位是字节,可用于常量,变量,数据类型,函数,sizeof是基于数据类型来计算长度的


4、

main() 
{ 
   char *str[]={"ab","cd","ef","gh","ij","kl"}; 
   char *t; 
   t=(str+4)[-1]; 
   printf("%s",t); 
}

//则显示"gh"

5、小端与大端

小端:低位字节数据存储在低地址
大端:高位字节数据存储在低地址
例如:
int a=0x12345678;(a首地址为0x2000)
0x2000  0x2001  0x2002  0x2003
0x12      0x34      0x56      0x78       大端格式
可以利用联合体union判断大小端

#include<stdio.h>
 
int main()
{
    union Test
    {
        unsigned int a;
        unsigned char b;
    }tmp={0x12345678};
 
    //如果打印出的是0x78,表明是litter-endian
    //如果打印出的是0x12,表明是big-endian
    if(tmp.b==0x78)
        printf("The endian of cpu is litter.\n");
    else
        printf("The endian of cpu is big.\n");
 
    return 0;
}

6、异步IO和同步IO区别

如果是同步IO,当一个IO操作执行时,应用程序必须等待,直到此IO执行完,相反,异步IO操作在后台运行, IO操作和应用程序可以同时运行,提高系统性能,提高IO流量; 在同步文件IO中,线程启动一个IO操作然后就立即进入等待状态,直到IO操作完成后才醒来继续执行,而异步文件IO中,线程发送一个IO请求到内核,然后继续处理其他事情,内核完成IO请求后,将会通知线程IO操作完成了。


7、用变量a定义

  • 一个整型数   int a;
  •  一个指向整型数的指针  int *a;
  •  一个指向指针的指针,它指向的指针式指向一个整型数  int **a;
  •  一个有10个整型数的数组   int a[10];
  •  一个有10指针的数组,该指针是指向一个整型数  int *a[10];
  •  一个指向有10个整型数数组的指针   int (*a)[10];
  •  一个指向函数的指针,该函数有一个整型数参数并返回一个整型数   int (*a)(int);
  •  一个有10个指针的数组,该指针指向一个函数,该函数有一个整型数参数并返回一个整型  int (*a[10])(int);

8、

int foo(void)
{
   int i;
   char c=0x80;
   i=c;
   if(i>0)
      return 1;
   return 2;
}
返回值为2;因为i=c=-128;如果c=0x7f,则i=c=127。

9、a=b*2;a=b/4;a=b%8;a=b/8*8+b%4;a=b*15;效率最高的算法

 a=b*2 -> a=b<<1;
 a=b/4 -> a=b>>2;
 a=b%8 -> a=b&7;
 a=b/8*8+b%4 -> a=((b>>3)<<3)+(b&3)
 a=b*15 -> a=(b<<4)-b

注意:当 lenth = 2^n 时,X % length = X & (length - 1)


10、c关键字

 c的关键字共32个

 (1)数据类型关键字(12)

 char,short,int,long,float,double,unsigned,signed,union,enum,void,struct

 (2)控制语句关键字(12)

 if,else,switch,case,default,for,do,while,break,continue,goto,return

 (3)存储类关键字(5)

 auto,extern,register,static,const

 (4)其他关键字(3)

 sizeof,typedef,volatile

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值