1、return語句不可返回指向「棧記憶體」的「指標」或「引用」,因為該內存在函式體結束時唄自動銷毀
2、布林型別、整型、浮點型判斷真偽的if語句不一樣
(1)建立
(2)銷毀
(3)得到長度
(4)從線性表刪除乙個元素
(5)從線性表新增乙個元素
4、斷言assert是僅在debug版本起作用的巨集,它用於檢查「不應該」發生的情況,在執行過程中,如果assert的引數為假,那麼程式就會中止
5、void *memcpy(void *pvto, const void *pvfrom, size_t size)
6、以下程式中,n是m的乙個引用(reference),m是被引用物(referent)。
int m;
int &n = m;
n既不是m的拷貝,也不是指向m的指標,其實n就是m它自己
7、如果指標p是函式的引數,那麼在函式的入口處用assert(p!=null)進行檢查。
如果是用malloc或new來申請記憶體,應該用if(p==null) 或if(p!=null)進行防錯處理。
8、陣列
char a = "hello";
char b[10];
strcpy(b, a); // 不能用 b = a;
if(strcmp(b, a) == 0) // 不能用if (b == a)
9、指標
int len = strlen(a);
char *p = (char *)malloc(sizeof(char)*(len+1));
strcpy(p,a); // 不要用p = a;
if(strcmp(p, a) == 0) // 不要用if (p == a)
10、sizeof(p)得到的是乙個指標變數的位元組數,相當於sizeof(char*),而不是p所指的記憶體容量。
char a = "hello world";
char *p = a;
cout<< sizeof(a) << endl; // 12位元組
cout<< sizeof(p) << endl; // 4位元組
11、注意當陣列作為函式的引數進行傳遞時,該陣列自動退化為同型別的指標。
void func(char a[100])
sizeof(a)始終等於sizeof(char *)
12、如果函式的引數是乙個指標,不要指望用該指標去申請動態記憶體;指標可以用作輸出引數
void getmemory(char *p, int num)
void test(void)
13、如果非得要用指標引數去申請記憶體,那麼應該改用「指向指標的指標」
void getmemory2(char **p, int num)
void test2(void)
高質量C C程式設計指南
1.如果引數是指標,且僅作輸入用,則應在型別前加const,以防止該指標在函式體內被意外修改 2.在函式體的 入口處 對引數的有效性進行檢查 在函式體的 出口處 對return語句的正確性和效率進行檢查 3.引用的一些規則如下 1 引用被建立的同時必須被初始化 指標則可以在任何時候被初始化 2 不能...
高質量C C程式設計指南
目錄 前 言.6 第1章檔案結構 11 1.1 版權和版本的宣告 11 1.2 標頭檔案的結構 12 1.3 定義檔案的結構 13 1.4 標頭檔案的作用 13 1.5 目錄結構 14 第2章程式的版式 15 2.1 空行.15 2.2 行.16 2.3 行內的空格 17 2.4 對齊.18 2.5...
高質量C C程式設計指南 5
第5章常量 常量是一種識別符號,它的值在執行期間恆定不變。c語言用 define來定義 常量 稱 為巨集常量 c 語言除了 define外還可以用 const來定義 常量 稱 為const 常量 5.1為什麼需要常量 如果不使用常量,直接在程式中填寫數字或字串,將會有什麼麻煩?1 程式的可 讀性 可...