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道题目都比较容易解决