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 我有個函數,它應該接受并初始化一個指針 void f(int *ip) { static int dummy = 5; ip = &dummy;} 但是當我如下調用時: int *ip; f(ip); 調用者的指針卻沒有任何變化。 你確定函數初始化的是你希望它初始化的東西嗎?請記住在 C 中, 參數是通過值傳遞的。被調函數僅僅修改了傳入的指針副本。你需要傳入指針的地址 (函數變成接受指針的指針), 或者讓函數返回指針。
同理下面也是錯誤的
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)
{
//轉化函數: A...... //算法
B.......
}
End = beginTime();
錯誤地方:A....花費2毫秒
結果測試出現很大問題:
A....花費兩毫秒
100*1000*2 = 200s = 3.3分鐘
修改方案:
//轉化函數: A......
放在外面進行轉化
start = beginTime();
for (int j = 0; j < 1000; ++ j)
{
//轉化函數: 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:讀寫文件, 發送消息,最好定義一個頭,那樣
容易知道讀取的是什么,讀取的是否錯誤
// 消息頭
struct TMSG_HEADER
{
char cMsgID; // 消息標識
TMSG_HEADER(char MsgID = INVALID_MSG)
: cMsgID(MsgID)
{
}
};
// 請求傳送的文件名
// 客戶端傳給服務器端的是全路徑名稱
// 服務器傳回給客戶端的是文件名
struct TMSG_FILENAME : public TMSG_HEADER
{
char szFileName[256]; // 保存文件名的字符數組
TMSG_FILENAME()
: TMSG_HEADER(MSG_FILENAME)
{
}
};
// 傳送文件長度
struct TMSG_FILELENGTH : public TMSG_HEADER
{
long lLength;
TMSG_FILELENGTH(long length)
: TMSG_HEADER(MSG_FILELENGTH), lLength(length)
{
}
};
累了,以后再寫吧,↖(^ω^)↗