本文為個人讀書筆記,僅供記錄學習過程中遇到的日後需要留意的問題,如有相關版權問題請及時通知作者。
register
register變數必須是能被cpu暫存器所能接受的型別,必須是乙個單個的值,且其長度應小於或等於整型的長度。
register變數可能不存放在記憶體中,所以不能用取址運算子
static
靜態全域性變數,作用域僅限於變數被定義的檔案中,從定義處到檔案結尾。其他檔案使用extern宣告也無法使用。
靜態區域性變數,在函式體內定義,只能在函式內使用。函式執行結束,靜態變數值不會被銷毀,函式下次使用時仍然能用到這個值。
靜態函式,函式的作用域限於本文本,所以這種函式又稱為內部函式。使用內部函式的好處是,不同的人編寫不同的函式時,不用擔心自己定義的函式會與其它檔案中的函式同名。
變數的命名規則
盡量避免名字中出現數字編號
多個檔案之間共同使用的全域性變數或函式要加範圍限定符(dbo_ )
if else
bool與零值判斷最好的寫法:if(btestflag) if(!btestflag)
float與零值判斷最好的寫法:if((ftestval>=-epsinon)&&(ftestval<=epsinon));//epsinon為定義好的精度
指標與零值判斷最好的寫法:if(null==p); if(null!=p);
建議在真正需要用空語句時寫成:null;
switch case
即使不需要default處理,也應該保留乙個空的default語句。
盡量把正常情況,執行頻率高的case放在前面
default子句只用於檢查真正的預設情況,而不要把剩下的一種情況放到case裡。
迴圈盡量把長迴圈放在內層,短迴圈放在外層
盡量不在for內修改迴圈變數
迴圈盡量控制在3層以內
goto
禁用。void
void * 可以指向任何型別的資料,同為void型的指標之間可以互相賦值
如果沒有返回值的函式,應宣告為void型別。c語言中,不加返回值型別限定的函式,就會被編譯器作為返回整形值處理。
ansi標準中,不能對void 指標進行演算法操作(+-)。gnu中作為char *進行計算。
void不能代表乙個真實的變數,只是一種抽象。
return
return語句不可返回指向「棧記憶體」的指標,因為該內存在函式體結束時被自動銷毀
const
const修飾唯讀變數,而不是常量
const唯讀變數必須在定義的同時初始化
#define巨集是在預編譯階段進行替換,而const修飾的制度變數是在編譯的時候確定值。#define巨集沒有型別,而const修飾的唯讀變數具有特定的型別。
const int *p;
const修飾*p,p是指標可變,*p是指標指向的物件不可變。
int const *p;
const修飾*p,p是指標可變,*p是指標指向的物件不可變。
int *const p;
const修飾p,p不可變,p指向的物件可變
const int *const p;
前乙個const修飾*p,後乙個const修飾p,指標p和p指向的物件都不可變。
const修飾函式引數,防止引數值被引數體改變。
const修飾函式返回值,保證返回值不可被改變。
volatile
修飾的變數表示可以被某些編譯器的未知元素更改(程式**意外的元素)
volatile可以保證對特殊地質的穩定訪問。
extern
struct
結構體所佔的記憶體大小是其成員所佔記憶體之和。
空結構體的大小是1個byte
c99中,結構中的最後乙個元素允許時未知大小的陣列,叫做柔性陣列成員,但結構中的肉型陣列成員前必須至少乙個其他成員。包含柔性陣列成員的結構用malloc()函式進行記憶體動態分配,分配的記憶體應該大於結構的大小,以適應柔性陣列與其大小。用完後需要用free函式釋放記憶體。柔性陣列不算結構體的正式成員。
c++裡struct與class一般可以通用,區別在於struct成員預設public,class預設private
union
如果一些資料不可能在同一時間同時被用到,則可以使用union
union型資料所佔的空間等於其最大的成員所佔的空間。對union型的成員的訪問都是相對於該聯合體基位址的偏移量0開始。
可以利用union型別資料的特點,判斷資料模式是大端模式還是小端模式。
enum
實際上enum是對乙個變數取值範圍的限定,花括號內是取值範圍,如果賦給該型別變數的值不再列表中,則會報錯或警告。
與#define巨集的區別:#define巨集常量是在預編譯階段進行簡單替換。列舉常量則是在編譯的時候確定值。
typedef
typedef是給乙個已經存在的資料型別(而不是變數)取乙個別名,而非定義乙個新的資料型別。
typedef不支援型別擴充套件(unsigned),但支援const
C語言深度解剖第一章筆記
1.關鍵字 1.1定義與申明 定義 建立了乙個物件,並分配了相對應的記憶體 申明 告訴編譯器,這個名字已經分配到了乙個記憶體,和這個名字已經被使用。1.2關鍵字auto 編譯器預設所有變數都是auto,可以忽略 1.3關鍵字register 請求編譯器盡可能將register變數放在cpu內部暫存器...
C語言筆記(第一章 C語言程式設計)
標籤 空格分隔 c語言學習 本章主要內容 c語言標準 標準庫的概念 如何建立c程式 如何組織c程式 如何編寫在螢幕上顯示文字的程式 任何物品事件的使用都需要乙個大家都認同的使用規則,如同遊戲一樣,大家需要遵守同乙個遊戲規則,才能更好的使用。1989 年國際標準組織 iso 採納了美國國家標準協會 a...
C 第一章(筆記)
1 c語言和c 的發展歷史和基本原理 c 代表過程性語言傳統 c 類代表物件導向語言的傳統 c 模版支援通用程式設計傳統 c程式設計原理 c是過程性語言,強調的是程式設計的演算法方面 c語言前世今生 上世紀70年代,貝爾實驗室,dennis ritchie,開發unix作業系統 傳統上作業系統由組合...