华为 嵌入式软件工程师面试题

2019-07-13 08:38发布

(1)什么是预编译,何时需要预编译: 答案: 1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。 预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。 (2)char * constp char const * p const char *p 上述三个有什么区别? 答案: char * const p; //常量指针,p的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和char const *p char * const p是一个char型指针,指针是常量,不允许修改,即类似p=q的语句是错误的;
char const * p和const char * p是同一种char型指针,指针指向的字符被看作是常量,不允许修改,即类似*p = q的语句是错误的。 (3)char str1[] = “abc”; charstr2[] = “abc”; const char str3[] = “abc”; const charstr4[] = “abc”; const char *str5 = “abc”; const char *str6= “abc”; char *str7 = “abc”; char *str8 = “abc”;cout < < ( str1 == str2 ) < < endl; cout < < ( str3 == str4 )< < endl; cout < < ( str5 == str6 ) < < endl; cout < <( str7 == str8 ) < < endl; 结果是:0 0 1 1str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。 (4)以下代码中的两个sizeof用法有问题吗? [C易] void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母{ for( size_t i=0; i

include

include

define SQUARE(a) ((a)*(a))

int a=5; int b; b=SQUARE(a++); 答案:这个没有问题,s(a++),就是((a++)×(a++))唯一要注意的就是计算后a=7了 3: typedef unsigned char BYTE intexamply_fun(BYTE gt_len; BYTE *gt_code) { BYTE *gt_buf; gt_buf=(BYTE )MALLOC(Max_GT_Length); ...... if(gt_len>Max_GT_Length) { return GT_Length_ERROR; } ……. } 答案:要释放内存问答题: 1.IP Phone的原理是什么? 答案:IPV6 2.TCP/IP通信建立的过程怎样,端口有什么作用? 答案:三次握手,确定是哪个应用程序使用该协议 (三) 1、局部变量能否和全局变量重名? 答案:能,局部会屏蔽全局。要用全局变量,需要使用”::” 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内 2、如何引用一个已经定义过的全局变量? 答案:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错 3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 答案:可以,在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错 4、语句for( ;1 ;)有什么问题?它是什么意思? 答案:和while(1)相同。 5、do……while和while……do有什么区别? 答案:前一个循环一遍再判断,后一个判断以后再循环。 6、请写出下列代码的输出内容#include

define MAX_SRM 256

DSN get_SRM_no() { static int SRM_no; int I; for(I=0;I