2012联发科校园招聘成都手机软件部门笔试&第一轮面试

17号川大笔试,基本都是C的题目。我选的是手机软件部门:

选择题我有印象的:

1.int p = (short)0x8000,问打印p是多少?-32678

2.##的使用(连接):

define call(x,y) x##y

3.char* str = "hello"

   str = "pri"

  prinf("%s",str);有什么问题?直接崩溃,char *s = "hello",hello存在了常量存储区,只能读不能修改

4.大端小端的概念

char c = 'abc'

在大段和小段下,打印c的结果是什么?

简答题:

(1)动态内存分配

(2)extern c的用法

(3)sizeof对指针,数组的用法

(4)求1的个数(x&(x-1))

程序设计:

(1)堆排序

(2)求有环链表第一个入环节点

(3)atol的写法

程序设计题注意把自己的思路展示出来。

一面:

(1)c语言static,const用法

(2)const char *p,char *const p的意义和用法

(3)遇到过哪些警告:答曰:类型不匹配,精度丢失

(4)C语言中的默认全局作用域,为什么会成立?编译器角度来分析?其实与extern c的用法一样。

要求区分编译错误和链接错误。

(5)我没有答对:

void foo(int *p){
//dosomething 
}

现在主函数是

int main(){
    char c = 1;
    foo(&c);
}

有啥问题?

我说的还是类型不匹配,恩,面试官认为太泛了。

我说类型对于指针式非常重要的,只有编译器知道了指针的类型,才知道一次处理,如自增操作,走几步?(其实,这里,如果我相当此时如果打印指针内容,指针的类型同样要决定函数要读入地址的内容的几个字节,这就是面试官要得答案。如char p,那么只会读取p所指地址的1个字节,但是int p会读取p所指向地址的4分字节)

正解为:foo中调用的时候,希望传入的是1,但是实际上想foo函数传递参数的时候,会把&c后面的3个字节的内容也传入,这是垃圾信息,这样就会出现隐晦的bug。当然,编译器肯定会警告。

测试用例:

# include <stdio.h>
void foo(int *p){
	printf("%d",*p);
}
int main(){
	char c = 1;
	foo(&c);
	return 0;
}
输出结果:

-42991615

而且这个还是随时变化的。

第一面收获:

就是最后一个题目了,以前觉得C的基础还不错,还是有没有考虑到的地方。

另外我看见自己的编程大题目得分很低,看来需要把自己的思路展示出来。其实最后2道题目都比较容易解决

你可能感兴趣的:(c,面试,招聘,手机,include,编译器)