欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-14 21:39:12
...

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