1:指針問題:
錯誤代碼:
//A.cpp
T gTemp;
void GetA(T *p)
{
p = &gTemp;
}
//B.cpp
T iInfo;
GetA(&iInfo);
或者
T *piInfo;
GetA(piInfo);
正確的是
//A.cpp
T gTemp;
T* GetA()
{
return &gTemp;
}
//B.cpp
T *piInfo = GetA();
解決方案:
<<你必須知道的495個C語言問題>>5.
4 我有個函數(shù),它應(yīng)該接受并初始化一個指針 void f(int *ip) { static int dummy = 5; ip = &dummy;} 但是當(dāng)我如下調(diào)用時: int *ip; f(ip); 調(diào)用者的指針卻沒有任何變化。 你確定函數(shù)初始化的是你希望它初始化的東西嗎?請記住在 C 中, 參數(shù)是通過值傳遞的。被調(diào)函數(shù)僅僅修改了傳入的指針副本。你需要傳入指針的地址 (函數(shù)變成接受指針的指針), 或者讓函數(shù)返回指針。
同理下面也是錯誤的
void Swap(T* rht, T* lht)
{
T *pTemp = rht;
rht = lht;
lht = pTemp;
}
2: 計算算法時間問題
start = beginTime();
for (int i = 0; i < 100; ++ i)
for (int j = 0; j < 1000; ++ j)
{
//轉(zhuǎn)化函數(shù): A...... //算法
B.......
}
End = beginTime();
錯誤地方:A....花費2毫秒
結(jié)果測試出現(xiàn)很大問題:
A....花費兩毫秒
100*1000*2 = 200s = 3.3分鐘
修改方案:
//轉(zhuǎn)化函數(shù): A......
放在外面進(jìn)行轉(zhuǎn)化
start = beginTime();
for (int j = 0; j < 1000; ++ j)
{
//轉(zhuǎn)化函數(shù): A...... }
for (int i = 0; i < 100; ++ i)
for (int j = 0; j < 1000; ++ j)
{
//算法
B.......
}
End = beginTime();
3: Hash 算法
4:for(u_short i = 100; i >= 0; --i)
修改:
for (u_short i = 100; i > 0; --i)
for(int i = 100; i >= 0; --i)
5:讀寫文件, 發(fā)送消息,最好定義一個頭,那樣
容易知道讀取的是什么,讀取的是否錯誤
// 消息頭
struct TMSG_HEADER
{
char cMsgID; // 消息標(biāo)識
TMSG_HEADER(char MsgID = INVALID_MSG)
: cMsgID(MsgID)
{
}
};
// 請求傳送的文件名
// 客戶端傳給服務(wù)器端的是全路徑名稱
// 服務(wù)器傳回給客戶端的是文件名
struct TMSG_FILENAME : public TMSG_HEADER
{
char szFileName[256]; // 保存文件名的字符數(shù)組
TMSG_FILENAME()
: TMSG_HEADER(MSG_FILENAME)
{
}
};
// 傳送文件長度
struct TMSG_FILELENGTH : public TMSG_HEADER
{
long lLength;
TMSG_FILELENGTH(long length)
: TMSG_HEADER(MSG_FILELENGTH), lLength(length)
{
}
};
累了,以后再寫吧,↖(^ω^)↗