1 / 20
文档名称:

华为嵌入式面试题.doc

格式:doc   大小:130KB   页数:20页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

华为嵌入式面试题.doc

上传人:小健 2021/8/17 文件大小:130 KB

下载得到文件列表

华为嵌入式面试题.doc

文档介绍

文档介绍:华为嵌入式系统面试题
什么是预编译,何时需要预编译:
答案:
1、 总是使用不经常改动的大型代码体。
2、 程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选 项。在这种情况下,可以将所有包含文件预编译为一个预编译头。
char * const p char const * p const char *p _h述三个有什么区 别?
答案:
char * const p; 〃常量指针,p的值不可以修改
这个const服务于这个指针,是个常量指针,p的地址不能被改变
char const *p; //指向常量的指针,指向的常量值不可以改
const char *p; 〃和 char const *p
const放在*前,表示他服务的是这个指针所指向的值
(3)
char strl[] = nabc";
char str2[] = "abcn;
const char str3[] = ”abc”;
const char str4[] = "abc";
〃上面是数组变量,它们有各自的内存空间
const char *str5 = "abc";
const char *str6 = "abc";
char *str7 = "abc”;
char *str8 = ”abc”;
〃上面的指针指向相同的敞亮地址
cout < < ( strl == str2 ) < < endl;
cout < < ( str3 == str4 ) < < endl;
〃所以数组变量的地址不一样
cout < < ( str5 == str6 ) < < endl;
cout < < ( str7 == str8 ) < < endl;
〃所以指针的地址一样 结果是:00 11 strl,str2,str3,str4是数组变量,它们有各自的内存空间; 而
str5,str6,str7,str8是指针,它们指向相同的常量区域。
以下代码中的两个sizeof用法有问题吗?
[C易]
void UpperCase( char str[])
//将str中的小写字母转换成大写字母
{
for( size_t i=0; i <sizeof(str)/sizeof(str[0]); ++i)
if( 'a' <=str[i] && str[i] v='z') str[i] -= ('a'・'A');
)
char str[] = "aBcDe";
cout v < "str 字符长度为:"< v sizeof(str)/sizeof(str[0]) < < endl;
UpperCase( str);
cout < < str < < endl;
答案:函数内的sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数 组的大小,无法检测动态分配的或外部数组大小。
函数外的str是一个静态定义的数组,因此其大小为6,因为还有,\0,,
函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信 息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。
Strlen是有效字符串的实际长度,如果你不定,则它一直查找,知道找到,\0,为止 而sizeof则表示你空间分配的大小,而你有没有给他初始化无关
所以,strlen是对一个有效字符串的函数计算,一定要在运行时才能计算出来
而sizeof则可以在编译的时候,就能得到他的值
一个32位的机器,该机器的指针是多少位答案:
指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的 数据总线。所以指针的位数就是4个字节了。
32bit=4 个 BYTE
6o main()
{
int a[5]={ 1,2,3,4,5};
int *ptr=(int *)(&a+l);
printf("%d,%d",*(a+l),*(ptr-l));
)
答案:2o 5
*(a+l)就是 a[l],
*(ptr-l)就是a[4],执行结果是2, 5 &a+l不是首地址+1,系统会认为加-个a数 组的偏移,是偏移了一个数组的大小(本例是
5个int) int *ptr=(int *)(&a+l);则 ptr实际是&(a[5]),也就是a+5原因如下:&a是数组指针,其类型为int(*)[5];而 指针加1要根据指针类型加上…定的值,不同类型的指针+1之后增加的大小不 同a是长度为5的int数组指针,所以要加5*sizeof(int)所以ptr实际是a[5]但 是prt与(&a+l)类型是不一样的(这点很重要)所以prt-1只会减去sizeof(int*