1、運行下圖中C代碼,輸出的結果是什麼?
[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是兩個字符串數組。我們會爲它們分配兩個長度爲12個字節的空間,並把"hello world"的內容分別拷貝到數組中去。這是兩個初始地址不同的數組,因此比較str1和str2的值,會不相同。str3和str4是兩個指針,我們無需爲它們分配內存以存儲字符串的內容,而只需要把它們指向"hello world“在內存中的地址就可以了。由於"hello world”是常量字符串,它在內存中只有一個拷貝,因此str3和str4指向的是同一個地址。因此比較str3和str4的值,會是相同的。2、運行下圖中的C++代碼,打印出的結果是什麼?
[cpp]
int Fun1(char* str)
{
printf("%sn", str);
return 0;
}
int Fun2(char* str)
{
printf("%sn", 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("%sn", str);
return 0;
}
int Fun2(char* str)
{
printf("%sn", 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++中,與、或運算是從左到右的順序執行的。在計算rest1時,先計算Fun1(“a”) && Func2(“b”)。首先Func1(“a”)打印出內容爲a的一行。由於Fun1(“a”)返回的是false, 無論Func2(“b”)的返回值是true還是false,Fun1(“a”) && Func2(“b”)的結果都是false。由於Func2(“b”)的結果無關重要,因此Func2(“b”)會略去而不做計算。接下來計算 Fun1(“c”) || Func2(“d”),分別打印出內容c和d的兩行。在計算rest2時,首先Func1(“a”)打印出內容爲a的一行。由於Func1(“a”)返回false,和前面一樣的道理,Func2(“b”)會略去不做計算。由於Fun1(“a”) && Func2(“b”)的.結果是false,不管Fun1(“c”) && Func2(“d”)的結果是什麼,整個表達式得到的結果都是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是一個指針。在32位機器上,任意指針都佔4個字節的空間。*pString1是字符串pString1的第一個字符。一個字符佔一個字節。pString2是一個數組,sizeof(pString2)是求數組的大小。這個數組包含100個字符,因此大小是100個字節。而在函數 SizeOf中,雖然傳入的參數是一個字符數組,當數組作爲函數的參數進行傳遞時,數組就自動退化爲同類型的指針。4. 引用與指針有什麼區別?
1) 引用必須被初始化,指針不必。
2) 引用初始化以後不能被改變,指針可以改變所指的對象。
2) 不存在指向空值的引用,但是存在指向空值的指針。5. 描述實時系統的基本特性
在特定時間內完成特定的任務,實時性與可靠性
6. 全局變量和局部變量在內存中是否有區別?如果有,是什麼區別?
全局變量儲存在靜態數據庫,局部變量在堆棧
7. 什麼是平衡二叉樹?
左右子樹都是平衡二叉樹 且左右子樹的深度差值的絕對值不大於1
8. 堆棧溢出一般是由什麼原因導致的?
沒有回收垃圾資源
9. 什麼函數不能聲明爲虛函數?
constructor
10. 冒泡排序算法的時間複雜度是什麼?
O(n^2)
11. 寫出float x 與“零值”比較的if語句。
if(x>0.000001&&x<-0.000001)
12. Internet採用哪種網絡協議?該協議的主要層次結構?
tcp/ip 應用層/傳輸層/網絡層/數據鏈路層/物理層
13. Internet物理地址和IP地址轉換採用什麼協議?
ARP (Address Resolution Protocol)(地址解析協議)
14. IP地址的編碼分爲哪倆部分?
IP地址由兩部分組成,網絡號和主機號。不過是要和“子網掩碼”按位與上之後才能區分哪些是網絡位哪些是主機位。
c 面試題
學識都
人氣:5.4K
最新文章