關於C語言的面試問題

月盡天明發表於2012-12-13

今天,參加了一個公司的面試,下面寫一下一些感想和想法。

那個公司叫高知特資訊科技(上海)有限公司,還是個美國財富500強,上市公司。聽那個宣講人說的很牛X的。

那個宣講人大致給我們介紹了一下情況。就是高知特資訊科技有限公司上海分公司委託他們公司招聘25名工程師,並

包括培訓業務。他們是個培訓公司,經常和大公司合作招聘和培訓,然後往公司裡輸送人才。

大家都知道,世界500強公司嘛,肯定對英語有很高的要求了。所以面試題都是全英的。不僅考察語言的能力還有

的英語閱讀能力。他說,真正在職場面試的時候,尤其是那些大的公司,特別注重你的綜合素質和能力。綜合素質能

後達到60%的分數,然後程式設計能力只佔40%左右。英語真的很重要。。。

下面,說幾道面試的題目,都是我翻譯過的。

 

第一道題是考察union的。


#include <stdio.h>

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語言的一種結構體,類似與struct,但是絕對不同。

它表示結構體中的資料成員公用一個位置來存放資料。union主要用來壓縮空間,如果一些資料不可能在同一時

間被用到,就可以考慮用union來存放資料。union的成員預設屬性是public。

union被宣告時,編譯程式自動產生一個變數,這個變數的長度是聯合中最大的變數的長度。所以,union型資料

所佔的空間等於其最大的成員所佔的空間。對union型的成員的存取都是相對於該聯合體的基地址的偏移量為0處開始

的,也就是聯合體的訪問不論是對哪個變數的存取都是從union的首地址開始的。


union定義的時候需要注意一下三點:

1.成員變數的資料型別可以是基本資料型別或陣列、結構、聯合等構造型別及其他已宣告的合法的資料型別。

2.聯合型別的宣告僅僅是一個資料型別的說明,編譯時不會為其分配記憶體空間,只有當用聯合型別定義結構型別

的變數時,編譯時才會為這種變數分配記憶體空間。

3.聯合型別宣告中最後的分好“;”不要漏掉。


下面再看一個union的例子:

#include <iostream>
#include <cstring>
using namespace std;

struct POINT{	//宣告結構型別
	int x, y;
};

union ONE{		//宣告聯合型別
	POINT pt;	//結構型別
	int iValue; //整型型別
	float fValue;//單精度型別
};

//
void print(ONE one){
	cout<<"聯合型別各個成員的值如下:"<<endl;
	cout<<"iValue = "<<one.iValue<<endl;
	cout<<"fValue = "<<one.fValue<<endl;
	cout<<"pt = ("<<one.pt.x<<","<<one.pt.y<<")"<<endl<<endl;
}

int main(){
	ONE o = {10, 20};
	o.iValue = 33;
	print(o);
	o.fValue = 80.0;
	print(o);
	POINT pt ={30, 40};
	o.pt = pt;
	print(o);
	return 0;
}

程式的執行結果是:




第二道題是讓你具體解釋rewind的含義和用法的。

rewind 功能是:將檔案內部的位置指標重新指向一個流的開頭。

注意:

不是檔案指標而是檔案內部的位置指標,隨著對檔案的讀寫,檔案的位置指標向後移動。而檔案指標是指向整個

檔案,如果不重新賦值檔案指標不會改變。

用法:

void rewind(FILE *stream)

引用標頭檔案 :  stdio.h

返回值:無

----------------(參考百度知道)



相關文章