C 筆記 《C語言深度剖析》第一章 關鍵字

2021-07-07 01:42:59 字數 2454 閱讀 7967

本文為個人讀書筆記,僅供記錄學習過程中遇到的日後需要留意的問題,如有相關版權問題請及時通知作者。

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作業系統 傳統上作業系統由組合...