定義和宣告的最大區別在於:
定義建立了變數(物件)並為這個物件分配了記憶體。
宣告:只是告訴編譯器這個變數名被提前預定了
register
要求編譯器盡可能的將變數放在cpu內部暫存器中,而不會是通過記憶體定址訪問以提高效率。
break
可以跳出所有迴圈 。do while . while . for
迴圈語句的主要點,建議把最長的迴圈放在最內層,最短的迴圈放在最外層,減少少cpu跨切迴圈層的次數
void
真正發揮的作用在於
對函式返回的限定
對函式引數的限定
void *
,任何型別的指標都可以直接賦值給他無需強制轉換;
void
*p1;
int*p2;
p1 = p2;
//正確
p2 = p1;
//錯誤
如果函式沒有返回值,那麼宣告應該為void
型別。
在c語言中,凡是不加返回值型別限定的函式,就會被編譯器作為返回整型值處理。但是很多時候都被誤以為void
使用void 指標型別要非常小心。
按照ansi(american national standards institute)
標準,不能對void指標進行演算法操作,
void
* pvoid;
pvoid++
;//不合法
pvoid +=1
;//不合法
gnu
卻認為void*
的演算法操作和char *
一致
void
* pvoid;
pvoid++
;//合法
pvoid +=1
;//合法
如果函式的引數可以是任意型別的指標,那麼應宣告其引數為void*
例如記憶體操作函式memcpy()和memset()
void
*memccpy
(void
* dest,
const
void
*src,size_t len)
;void
*memset
(void
* buffer,
int c, size_t num)
;
void
不能代表乙個真實的變數,因為定義變數時必須分配記憶體空間。
void a // error
function
(void a)
;// 錯誤
區域性變數,位於棧記憶體中,在函式結束後,就被釋放
const
也許被稱為readonly
才對 唯讀變數
修飾一般變數
int
const i =
2; 或 const
int i =2;
//都可以
修飾陣列
int
const a[5]
=; 或
const
int a[5]
=;
修飾指標
const
int*p ;
//p可變,p指向的物件不可變
intconst
*p ;
//p可變,p指向的物件不可變
int*
const p;
// p不可變,p指向的物件可變
const
int*
const p;
//指標p和p指向的物件都不可變
記憶方法,先忽略型別名,(編譯器解析的時候也是忽略型別名的)
const 離那個近,就修飾誰,誰就不可以改變
const 修飾函式引數,起到保護作用,避免引數被函式體內意外改變。
void
fun(
const
int i)
;//i 在函式體中不能被改變。
const 修飾函式的返回值,這樣返回值不可被改變,達到保護的目的。
例如 const
intfun
(void
);
在另一檔案中引用const唯讀變數:
extern
const
int i;
//正確的宣告
extern cons int j =10;
// 錯誤,唯讀變數不能被改變
c 知識點小總結
static inline 指標與引用 零碎知識點 修飾符,代表所修飾的型別的物件 變數不可更改。預設檔案區域性變數。普通變數預設為extern 定義時必須初始化。初始化之後不能更改。指標指向const物件 const 指標本身的值可更改。可指向非const物件。但不能通過這個指標更改其所指物件的值...
C語言小知識點
比較難歸類,就單獨列舉在這裡 無型別識別符號,只能宣告函式的返回型別,不能宣告變數,可以宣告指標 int a a 55 a 代表a的位址 a 代表 位址 就為位址對應的值,就是55 先來看看整數儲存的例子 include includeusing namespace std define print...
C語言知識點總結
有段事件沒有寫c程式了,有些地方有些生疏了。這兩天事情比較少,準備再系統的看一邊c的基礎知識。這裡再總結一下平時沒太注意的知識要點。1 c語言的語句塊在c語言中,任何允許出現語句的地方既可以是由 號結尾的一條語句,也可以是由 括起來的若干條語句或宣告組成的語句塊 statement block 語句...