C 程式設計注意點

2021-06-22 18:20:23 字數 1981 閱讀 7833

1.strcpy()是碰到\0就會停止拷貝的,最好使用memcpy和strncpy代替。

2.memset並不分配記憶體,malloc才分配。

3.迴圈裡面要注意出錯的地方sleep

4.匈牙利命名法

5.臨時變數也要有意義

6.控制代碼要注意釋放,特別是在出錯的地方

7.memset不能過於頻繁

8.物件的方法在前面,特別是public方法

9.使用extern c編譯c++程式時,不能包含過載函式。因為c編譯時函式名要唯一確定。

10.如果類的成員函式要呼叫全域性函式,應加上::標誌

11.不能在類中初始化常量,因為類的物件未被建立,編譯器不知道size的值是什麼。

class a

在類中建立常量的方法——使用列舉常量

class a

;int array[size1];

}列舉常量不會占用物件空間,他在編譯時被全部求值。列舉常量的缺點是:隱含型別是整數,最大值有限,且不能表示浮點數。

12.記憶體錯誤使用——釋放了記憶體卻繼續使用它

有三種情況:

a. 物件呼叫關係過於複雜,難以搞清某個物件是否已經釋放

b. return語句寫錯了,不能反悔指令「棧記憶體」的「指標」或「引用」,因為該內存在函式體結束時自動銷毀

c. free或delete之後,沒有將指標設定為null,導致產生「野指標」

13.字元陣列和字元指標

char a = "hello";

char *p = a;

//a的位址付給p,這樣修改p就是修改a

sizeof(a);

//結果:6,陣列的大小

strlen(a);

//結果:5,字串長度

sizeof(p);

//結果:4,指標大小

注意:陣列作為引數傳遞時自動退化為同型別的指標。

void func(char a[100])

14.指標的特性

(1)指標消亡了,並不表示它所指的記憶體會被自動釋放

(2)記憶體被釋放了,並不表示指標會消亡或者成了null指標

15.「野指標」的成因

(1)指標變數沒有被初始化,任何指標變數被建立時不會自動成為null指標,它的預設值是隨機的

會亂指一氣。所以要麼初始化,要麼指向null。

(2)free後沒有置為null

(3)指標操作超越了變數的作用範圍

16.exit和return

17.不要輕視拷貝建構函式與賦值函式

(1) 如果不主動編寫建構函式和賦值函式,編譯器將以「位拷貝」的方式自動生成預設的函式。倘若類中含有指標變數,那麼這兩個預設函式就隱含了錯誤。

如類string的兩個物件a,b為例,假設a.m_data為「hello」,b.m_data為「world」。執行b.m_data=a.m_data將造成三個錯誤:1.b.m_data原有的記憶體沒有被釋放,造成記憶體洩露;2.b.m_data和a.m_data指向同一塊記憶體;2.物件被析構時,m_data被釋放了兩次。

(2)拷貝建構函式和賦值函式,拷貝建構函式是在物件被建立時呼叫的,賦值函式只能被已經存在的物件呼叫。

string  c = a;

//呼叫了拷貝建構函式,最好寫成才c(a)

c = b;

//呼叫了賦值函式

note:引用不可能為空,而「指標」可以為null

(3)如果不想寫拷貝和賦值函式,就宣告為私有方法:

class a

18.派生類

(1)派生類的建構函式應在其初始化表裡呼叫基類的建構函式

(2)基類與派生類的析構函式應該為虛函式,這樣多型才有意義

(3)在編寫派生類的賦值函式時,不要忘記對基類函式的資料成員重新賦值

derived & derived::operator = (const derived &other)

19.繼承

繼承規則:若在邏輯上b是a的「一種」,並且a的所有功能和屬性對b而言都有意義,則允許b繼承a的功能和屬性。

C語言程式設計注意點

1 scanf d input scanf要用位址符 字串除外 scanf s input 因為字串名字即為字串首位址 scanf s input 遇到空格即結束,gets input 遇到空格不結束,遇到回車結束 scanf s input 如果input是char 一定要先用malloc開闢空間...

C語言程式設計注意點3

1 將複雜問題分解為簡單問題的程式設計方法稱為結構化程式設計,其特點為自頂向下 逐步細化 模組化 2 定義常量的方法 define 和const define pi 3.1415926 無分號,無常量型別 const float pi 3.14159 3 函式定義 原型 在ansi c標準中,所有函...

asp程式設計注意點

一 asp中,如果在檔案頭加入 option explicit 則表示該程式中的所有變數都必須 先定義,即dim varia,然後才能使用。今天在用aspjpeg 2.0做後台壓縮,結果執行到set jpeg server.createobject persits.jpeg 時,無論如何都不行。解決...