- 相關(guān)推薦
c 面試題
-
1、運(yùn)行下圖中C代碼,輸出的結(jié)果是什么?
[cpp]
int main(int argc, char** argv[])
{
char str1[] = "hello world";
char str2[] = "hello world";
char* str3 = "hello world";
char* str4 = "hello world";
if(str1 == str2)
printf("str1 and str2 are same.\n");
else
printf("str1 and str2 are not same.\n");
if(str3 == str4)
printf("str3 and str4 are same.\n");
else
printf("str3 and str4 are not same.\n");
return 0;
}int main(int argc, char** argv[])
{
char str1[] = "hello world";
char str2[] = "hello world";
char* str3 = "hello world";
char* str4 = "hello world";
if(str1 == str2)
printf("str1 and str2 are same.\n");
else
printf("str1 and str2 are not same.\n");
if(str3 == str4)
printf("str3 and str4 are same.\n");
else
printf("str3 and str4 are not same.\n");
return 0;
}
答案:輸出兩行。第一行是str1 and str2 are not same,第二行是str3 and str4 are same。
str1和str2是兩個(gè)字符串?dāng)?shù)組。我們會(huì)為它們分配兩個(gè)長(zhǎng)度為12個(gè)字節(jié)的空間,并把"hello world"的內(nèi)容分別拷貝到數(shù)組中去。這是兩個(gè)初始地址不同的數(shù)組,因此比較str1和str2的值,會(huì)不相同。str3和str4是兩個(gè)指針,我們無(wú)需為它們分配內(nèi)存以存儲(chǔ)字符串的內(nèi)容,而只需要把它們指向"hello world“在內(nèi)存中的地址就可以了。由于"hello world”是常量字符串,它在內(nèi)存中只有一個(gè)拷貝,因此str3和str4指向的是同一個(gè)地址。因此比較str3和str4的值,會(huì)是相同的。2、運(yùn)行下圖中的C++代碼,打印出的結(jié)果是什么?
[cpp]
int Fun1(char* str)
{
printf("%s\n", str);
return 0;
}
int Fun2(char* str)
{
printf("%s\n", str);
return 1;
}
int main(int argc, char ** argv[])
{
int res1, res2;
res1 = (Fun1("a") && Fun2("b")) || (Fun1("c") || Fun2("d"));
res2 = (Fun1("a") && Fun2("b")) && (Fun1("c") || Fun2("d"));
return res1 || res2;
}int Fun1(char* str)
{
printf("%s\n", str);
return 0;
}
int Fun2(char* str)
{
printf("%s\n", str);
return 1;
}
int main(int argc, char ** argv[])
{
int res1, res2;
res1 = (Fun1("a") && Fun2("b")) || (Fun1("c") || Fun2("d"));
res2 = (Fun1("a") && Fun2("b")) && (Fun1("c") || Fun2("d"));
return res1 || res2;
}
答案:打印出4行,分別是a、c、d、a。
在C/C++中,與、或運(yùn)算是從左到右的順序執(zhí)行的。在計(jì)算rest1時(shí),先計(jì)算Fun1(“a”) && Func2(“b”)。首先Func1(“a”)打印出內(nèi)容為a的一行。由于Fun1(“a”)返回的是false, 無(wú)論Func2(“b”)的返回值是true還是false,F(xiàn)un1(“a”) && Func2(“b”)的結(jié)果都是false。由于Func2(“b”)的結(jié)果無(wú)關(guān)重要,因此Func2(“b”)會(huì)略去而不做計(jì)算。接下來(lái)計(jì)算 Fun1(“c”) || Func2(“d”),分別打印出內(nèi)容c和d的兩行。在計(jì)算rest2時(shí),首先Func1(“a”)打印出內(nèi)容為a的一行。由于Func1(“a”)返回false,和前面一樣的道理,F(xiàn)unc2(“b”)會(huì)略去不做計(jì)算。由于Fun1(“a”) && Func2(“b”)的結(jié)果是false,不管Fun1(“c”) && Func2(“d”)的結(jié)果是什么,整個(gè)表達(dá)式得到的結(jié)果都是false,因此Fun1(“c”) && Func2(“d”)都將被忽略。
3、
[cpp]
int SizeOf(char pString[])
{
return sizeof(pString);
}
int main(int argc, char ** argv[])
{
char* pString1 = "google";
int size1 = sizeof(pString1);
int size2 = sizeof(*pString1);
char pString2[100] = "google";
int size3 = sizeof(pString2);
int size4 = SizeOf(pString2);
printf("%d, %d, %d, %d", size1, size2, size3, size4);
return 0;
}int SizeOf(char pString[])
{
return sizeof(pString);
}
int main(int argc, char ** argv[])
{
char* pString1 = "google";
int size1 = sizeof(pString1);
int size2 = sizeof(*pString1);
char pString2[100] = "google";
int size3 = sizeof(pString2);
int size4 = SizeOf(pString2);
printf("%d, %d, %d, %d", size1, size2, size3, size4);
return 0;
}
答案:4, 1, 100, 4。pString1是一個(gè)指針。在32位機(jī)器上,任意指針都占4個(gè)字節(jié)的空間。*pString1是字符串pString1的第一個(gè)字符。一個(gè)字符占一個(gè)字節(jié)。pString2是一個(gè)數(shù)組,sizeof(pString2)是求數(shù)組的大小。這個(gè)數(shù)組包含100個(gè)字符,因此大小是100個(gè)字節(jié)。而在函數(shù) SizeOf中,雖然傳入的參數(shù)是一個(gè)字符數(shù)組,當(dāng)數(shù)組作為函數(shù)的參數(shù)進(jìn)行傳遞時(shí),數(shù)組就自動(dòng)退化為同類型的指針。 -
4. 引用與指針有什么區(qū)別?
1) 引用必須被初始化,指針不必。
2) 引用初始化以后不能被改變,指針可以改變所指的對(duì)象。
2) 不存在指向空值的引用,但是存在指向空值的指針。5. 描述實(shí)時(shí)系統(tǒng)的基本特性
在特定時(shí)間內(nèi)完成特定的任務(wù),實(shí)時(shí)性與可靠性
6. 全局變量和局部變量在內(nèi)存中是否有區(qū)別?如果有,是什么區(qū)別?
全局變量?jī)?chǔ)存在靜態(tài)數(shù)據(jù)庫(kù),局部變量在堆棧
7. 什么是平衡二叉樹(shù)?
左右子樹(shù)都是平衡二叉樹(shù) 且左右子樹(shù)的深度差值的絕對(duì)值不大于1
8. 堆棧溢出一般是由什么原因?qū)е碌模?br /> 沒(méi)有回收垃圾資源
9. 什么函數(shù)不能聲明為虛函數(shù)?
constructor
10. 冒泡排序算法的時(shí)間復(fù)雜度是什么?
O(n^2)
11. 寫(xiě)出float x 與“零值”比較的if語(yǔ)句。
if(x>0.000001&&x<-0.000001)
12. Internet采用哪種網(wǎng)絡(luò)協(xié)議?該協(xié)議的主要層次結(jié)構(gòu)?
tcp/ip 應(yīng)用層/傳輸層/網(wǎng)絡(luò)層/數(shù)據(jù)鏈路層/物理層
13. Internet物理地址和IP地址轉(zhuǎn)換采用什么協(xié)議?
ARP (Address Resolution Protocol)(地址解析協(xié)議)
14. IP地址的編碼分為哪倆部分?
IP地址由兩部分組成,網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)。不過(guò)是要和“子網(wǎng)掩碼”按位與上之后才能區(qū)分哪些是網(wǎng)絡(luò)位哪些是主機(jī)位。
【c 面試題】相關(guān)文章:
C/C++程序員必備資料 常見(jiàn)筆面試題深入解析12-12
IG-WB-C&C 電話面試11-20
面試題精選02-18
c語(yǔ)言心得05-17
當(dāng)當(dāng)欲將B2C與C2C融合 打造綜合網(wǎng)上商城12-25
分享面試題目 教育職業(yè)面試題11-20
群碩筆試題Java和C++、C#11-21
中國(guó)C—C電子商務(wù)模式的稅收問(wèn)題與對(duì)策03-24
城管面試題11-09