1、sizeof()和strlen()的使用?
答:
1.從功能定義上,strlen函數,用來(lái)求字符串的長(cháng)度,sizeof函數是用來(lái)求指定變量或變量類(lèi)型等所占用內存的
大??;
2.sizeof是運算符,而strlen是C庫函數strlen只能用char*做參數,且以'\0'結尾的;
對于靜態(tài)數組處理:
char str[20]="0123456789";
strlen(str)=10; //表示數組中字符串的長(cháng)度
sizeof(str)=20; //表示數組變量分配的長(cháng)度
對于指針處理:
char *str="0123456789";
strlen(str)=10; //表示字符串的長(cháng)度
sizeof(str)=4; //表示指針變量的所占內存大小
sizeof(*str)=1; //表示'0'這個(gè)字符變量的所占內存大小
2、 struct 和 class的區別?
答:
(1)類(lèi)中的成員默認是private的,當是可以聲明為public,private 和protected,結構中定義的成員默認的都是
public.
(2)結構中不允許定義成員函數,當是類(lèi)中可以定義成員函數.
(3)結構不可以存在繼承關(guān)系,當是類(lèi)可以存在繼承關(guān)系.
3、 strcpy(), strcat(), strcmp,strlen(), strchr(), memcpy(), memcmp(), memset()的編寫(xiě)?
4、 內存的分配方式的分配方式有幾種?
答:
(1)從靜態(tài)存儲區域分配。內存在程序編譯的時(shí)候就已經(jīng)分配好,這塊內存在程序的整個(gè)運行期間都存在。例如
全局變量。
(2)在棧上創(chuàng )建。在執行函數時(shí),函數內局部變量的存儲單元都可以在棧上創(chuàng )建,函數執行結束時(shí)這些存儲單元
自動(dòng)被釋放。棧內存分配運算內置于處理器的指令集中,效率很高,但是分配的內存容量有限。
(3)從堆上分配,亦稱(chēng)動(dòng)態(tài)內存分配。程序在運行的時(shí)候用malloc或new申請任意多少的內存,程序員自己負責在
何時(shí)用free或delete釋放內存。動(dòng)態(tài)內存的生存期由我們決定,使用非常靈活,但問(wèn)題也最多。
5,、解釋堆和棧的區別?
答:
(1)棧區(stack):由編譯器自動(dòng)分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類(lèi)似于數據結構中
的棧。
(2)堆區(heap):一般由程序員分配釋放, 若程序員不釋放,程序結束時(shí)可能由OS回收 。注意它與數據結構中的
堆是兩回事,分配方式倒是類(lèi)似于鏈表.(主要有:malloc/free,new/delete)
6,、枚舉的用法,以及它與宏的區別?
答:
枚舉(enum)作用:定義一組常量,而且這些常量組成了一個(gè)集合。當我們將emun參數傳遞給函數時(shí),如果傳遞了
一個(gè)不屬于這個(gè)集合的參數,編譯器報錯。
區別:
枚舉是類(lèi)型,而宏沒(méi)有類(lèi)型。
枚舉將檢查其語(yǔ)法,而宏是簡(jiǎn)單的文本替換。
7、 const的用法,以及聲明const變量與宏的區別?
答:
const的用法有四種:
a): const對象和const類(lèi)型的對象;
b): const指針 和 指向const的指針 及兩者結合;
c): const 參數修飾 和 參數返回類(lèi)型的const修飾;
d): const類(lèi)成員 和 const 成員函數;
區別:
const常量有數據類(lèi)型, 而宏常量沒(méi)有數據類(lèi)型。編譯器可以對前者進(jìn)行類(lèi)型安全檢查,而對后者只能進(jìn)行字符
替換,沒(méi)有類(lèi)型
安全檢查。而且字符替換可能會(huì )帶來(lái)料想不到的邊界效應。
有些集成化工具可以對const常量進(jìn)行調試, 但不能對宏量進(jìn)行調試。
8、函數assert的用法?
答:
斷言assert是僅在debug版本起作用的宏,用于檢查“不應該“發(fā)生的情況。程序員可以把assert看成一個(gè)在任
何系統狀態(tài)下都可以安全使用的無(wú)害測試手段。
9、用預處理指令#define 聲明一個(gè)常數,用以表明1年中有多少秒(忽略閏年問(wèn)題)?
答:
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
10、 寫(xiě)一個(gè)"標準"宏MIN,這個(gè)宏輸入兩個(gè)參數并返回較小的一個(gè)?
答:
#define MIN(A,B) ((A) <= (B) ? (A) : (B))
11、嵌入式系統中經(jīng)常要用到無(wú)限循環(huán),你怎么樣用C編寫(xiě)死循環(huán)呢?
答:
這個(gè)問(wèn)題用幾個(gè)解決方案。我首選的方案是:
while(1)
{
}
一些程序員更喜歡如下方案:
for(;;)
{
}
12、用變量a給出下面的定義
a) 一個(gè)整型數(An integer)
答:a) int a; // An integer
b)一個(gè)指向整型數的指針( A pointer to an integer)
答:b) int *a; // A pointer to an integer
c)一個(gè)指向指針的的指針,它指向的指針是指向一個(gè)整型數( A pointer to a pointer to an intege)
答:c) int **a; // A pointer to a pointer to an integer
d)一個(gè)有10個(gè)整型數的數組( An array of 10 integers)
答:d) int a[10]; // An array of 10 integers
e) 一個(gè)有10個(gè)指針的數組,該指針是指向一個(gè)整型數的。(An array of 10 pointers to integers)
答:e) int *a[10]; // An array of 10 pointers to integers
f) 一個(gè)指向有10個(gè)整型數數組的指針( A pointer to an array of 10 integers)
答: f) int (*a)[10]; // A pointer to an array of 10 integers
g) 一個(gè)指向函數的指針,該函數有一個(gè)整型參數并返回一個(gè)整型數(A pointer to a function that takes an
integer as an argument and returns an integer)
答:g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an
integer
h) 一個(gè)有10個(gè)指針的數組,該指針指向一個(gè)函數,該函數有一個(gè)整型參數并返回一個(gè)整型數( An array of ten
pointers to functions that take an integer argument and return an integer )
答:h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument
and return an integer
13、關(guān)于內存對齊的問(wèn)題以及sizof()的輸出?
答:
編譯器自動(dòng)對齊的原因:為了提高程序的性能,數據結構(尤其是棧)應該盡可能地在自然邊界上對齊。原因在于
,為了訪(fǎng)問(wèn)未對齊的內存,處理器需要作兩次內存訪(fǎng)問(wèn);然而,對齊的內存訪(fǎng)問(wèn)僅需要一次訪(fǎng)問(wèn)。
14、 static有什么用途?(請至少說(shuō)明兩種)
答:
(1)在函數體,一個(gè)被聲明為靜態(tài)的變量在這一函數被調用過(guò)程中維持其值不變。
(2) 在模塊內(但在函數體外),一個(gè)被聲明為靜態(tài)的變量可以被模塊內所用函數訪(fǎng)問(wèn),但不能被模塊外其它函數
訪(fǎng)問(wèn)。它是一個(gè)本地的全局變量。
(3) 在模塊內,一個(gè)被聲明為靜態(tài)的函數只可被這一模塊內的其它函數調用。那就是,這個(gè)函數被限制在聲明它
的模塊的本地范圍內使用。
15、引用與指針有什么區別?
答:
(1) 引用必須被初始化,指針不必。
(2) 引用初始化以后不能被改變,指針可以改變所指的對象。
(3) 不存在指向空值的引用,但是存在指向空值的指針。
16、什么是平衡二叉樹(shù)?
答:
左右子樹(shù)都是平衡二叉樹(shù) 且左右子樹(shù)的深度差值的絕對值不大于1。
17、堆棧溢出一般是由什么原因導致的?
答:
沒(méi)有回收垃圾資源。
18、什么是預編譯?何時(shí)需要預編譯?
答:
(1)總是使用不經(jīng)常改動(dòng)的大型代碼體。
(2)程序由多個(gè)模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況下,可以將所有
包含文件預編譯為一個(gè)預編譯頭。
19、隊列和棧有什么區別?
答:
隊列先進(jìn)先出;棧后進(jìn)先出。
20、數組和鏈表的區別?
答:
數組:數據順序存儲,固定大??;
鏈表:數據可以隨機存儲,大小可動(dòng)態(tài)改變;
21、為什么數組名作為參數,會(huì )改變數組的內容,而其它類(lèi)型如int卻不會(huì )改變變量的值?
答:
當數組名作為參數時(shí),傳遞的實(shí)際上是地址。而其他類(lèi)型如int作為參數時(shí),由于函數參數值實(shí)質(zhì)上是實(shí)參的一
份拷貝,被調函數內部對形參的改變并不影響實(shí)參的值。
22、數據結構和算法:
A:查找:
(1)二分法查找;
(2)
(3)
(4)
B:寫(xiě)出下列算法的時(shí)間復雜度和實(shí)現排序:
(1)冒泡排序;
(2)選擇排序;
(3)插入排序;
(4)快速排序;
(5)堆排序;
(6)歸并排序;
23、編寫(xiě)gbk_strlen函數,計算含有漢字的字符串的長(cháng)度,漢字作為一個(gè)字符處理;已知:漢字編碼為雙字節,其中
首字節<0,尾字節在0~63以外;(如果一個(gè)字節是-128~127)?
本文來(lái)自CSDN博客,轉載請標明出處:http://blog.csdn.net/luoweihui/archive/2008/06/29/2595831.aspx
聯(lián)系客服