关于C语言的面试问题
今天,参加了一个公司的面试,下面写一下一些感想和想法。
那个公司叫高知特信息技术(上海)有限公司,还是个美国财富500强,上市公司。听那个宣讲人说的很牛X的。
那个宣讲人大致给我们介绍了一下情况。就是高知特信息技术有限公司上海分公司委托他们公司招聘25名工程师,并
且包括培训业务。他们是个培训公司,经常和大公司合作招聘和培训,然后往公司里输送人才。
大家都知道,世界500强公司嘛,肯定对英语有很高的要求了。所以面试题都是全英的。不仅考察语言的能力还有
你的英语阅读能力。他说,真正在职场面试的时候,尤其是那些大的公司,特别注重你的综合素质和能力。综合素质能
后达到60%的分数,然后编程能力只占40%左右。英语真的很重要。。。
下面,说几道面试的题目,都是我翻译过的。
第一道题是考察union的。
#include union{int i;char x[2];
}a;int main(){int b=0;a.x[0] = 10;a.x[1] = 1;printf("%d\n", a.i);return 0;
}
猜猜看输出的结果是什么???
答案是 266
下面来解释一下:
union是C语言的一种结构体,类似与,但是绝对不同。
它表示结构体中的数据成员公用一个位置来存放数据。union主要用来压缩空间,如果一些数据不可能在同一时
间被用到,就可以考虑用union来存放数据。union的成员默认属性是。
union被声明时,编译程序自动产生一个变量,这个变量的长度是联合中最大的变量的长度。所以,union型数据
所占的空间等于其最大的成员所占的空间。对union型的成员的存取都是相对于该联合体的基地址的偏移量为0处开始
的,也就是联合体的访问不论是对哪个变量的存取都是从union的首地址开始的。
union定义的时候需要注意一下三点:
1.成员变量的数据类型可以是基本数据类型或数组、结构、联合等构造类型及其他已声明的合法的数据类型。
2.联合类型的声明仅仅是一个数据类型的说明,编译时不会为其分配内存空间,只有当用联合类型定义结构类型
的变量时,编译时才会为这种变量分配内存空间。
3.联合类型声明中最后的分好“;”不要漏掉。
下面再看一个union的例子:
#include
#include
using namespace std;struct POINT{ //声明结构类型int x, y;
};union ONE{ //声明联合类型POINT pt; //结构类型int iValue; //整型类型float fValue;//单精度类型
};//
void print(ONE one){cout<<"联合类型各个成员的值如下:"<
程序的运行结果是:
第二道题是让你具体解释的含义和用法的。
功能是:将文件内部的位置指针重新指向一个流的开头。
注意:
不是文件指针而是文件内部的位置指针,随着对文件的读写,文件的位置指针向后移动。而文件指针是指向整个
文件,如果不重新赋值文件指针不会改变。
用法:
void (FILE *)
引用头文件 : stdio.h
返回值:无
----------------(参考百度知道)