編寫strcat函式
已知strcat函式的原型是char *strcat (char *strdest, const char *strsrc);
其中strdest 是目的字串,strsrc 是源字串。
(1)不呼叫c++/c 的字串庫函式,請編寫函式 strcat
答:vc原始碼:
char * __cdecl strcat (char * dst, const char * src)
(2)strcat能把strsrc 的內容連線到strdest,為什麼還要char * 型別的返回值?
答:方便賦值給其他變數
不用任何區域性和全域性變數實現int strlen(char *a)
#include #include #include #include using namespace std;
/*int strlen(char *a)
*/int strlen(char *a)
int main(void)
~t() };
int main()
大家可以自己執行這個程式,看一看 delete p1 和 delete p1 的不同結果,我就不在這裡貼執行結果了。
從執行結果中我們可以看出,delete p1 在**空間的過程中,只有 p1[0] 這個物件呼叫了析構函式,其它物件如 p1[1]、p1[2] 等都沒有呼叫自身的析構函式,這就是問題的癥結所在。如果用 delete,則在**空間之前所有物件都會首先呼叫自己的析構函式。
基本型別的物件沒有析構函式,所以**基本型別組成的陣列空間用 delete 和 delete 都是應該可以的;但是對於類物件陣列,只能用 delete。對於 new 的單個物件,只能用 delete 不能用 delete **空間。
所以乙個簡單的使用原則就是:new 和 delete、new 和 delete 對應使用。
陣列與指標的區別
陣列要麼在靜態儲存區被建立(如全域性陣列),要麼在棧上被建立。指標可以隨時指向任意型別的記憶體塊。
(1)修改內容上的差別
char a = 「hello」;
a[0] = 『x』;
char *p = 「world」; // 注意p 指向常量字串
p[0] = 『x』; // 編譯器不能發現該錯誤,執行時錯誤
(2) 用運算子sizeof 可以計算出陣列的容量(位元組數)。sizeof(p),p 為指標得到的是乙個指標變數的位元組數,而不是p 所指的記憶體容量。c++/c 語言沒有辦法知道指標所指的記憶體容量,除非在申請記憶體時記住它。注意當陣列作為函式的引數進行傳遞時,該陣列自動退化為同型別的指標。
char a = "hello world";
char *p = a;
cout<< sizeof(a) << endl; // 12 位元組
cout<< sizeof(p) << endl; // 4 位元組
計算陣列和指標的記憶體容量
void func(char a[100])
給出程式的輸出結果 .
#include using namespace std;
struct a
};struct b: public a
};struct c
b b;
a a;
};int main()
{ c c;
cout<
執行緒雜項題
1 注意加鎖的順序,加鎖都用同一順序。2 注意鎖的超時機制 1 可以用setpriority設定優先順序 1 10 自動對應作業系統的優先順序。2 getstate可以獲取執行緒狀態。不推薦 thread.stop 會惡意終止執行緒,破壞原子性。推薦 thread.interrupt 設定推出位,由...
面試題雜項
1,9月6日,網新恒天2014校園招聘筆試程式設計題 已知memcpy的函式為 void memcpy void dest const void src size t count 其中dest是目的指標,src是源指標。不呼叫c c的memcpy庫函式,請編寫memcpy。點評 老題,參 如下voi...
c 面試題雜項整理
static用法及優點 用法 不能在類宣告中初始化,不能通過建構函式初始化,在定義時初始化 1 static 成員 在類的作用域,避免與其他類成員,全域性變數衝突。阻止乙個類的例項化 純虛函式,建構函式宣告為public 在類內部建物件,不允許在外部建物件main 執行前做了什麼 全域性物件的建構函...