指針
- 指針是左結(jié)合的。int p;(指向整型的指針)。char ** p;——>(char)*p,指向字符串指針的指針
- 零:可以被用作任意類型,浮點類型、指針等;當0作為一個指針文字量時,表示一個指針當時并沒有指向任何對象。C中用一個宏NULL表示0指針,C++中多直接使用0
- 指針的加減運算:依賴于指針指向的類型。對于int *p,p++會移動int的大小;double *p,p++會移動double的大小
- const
- char *const p;指向字符串的指針,這個指針為常量,不能再指向其他對象
- char const* p;const char* p;指向常量字符串的指針,這個指針可以指向其他對象,但是指針所指向的字符串對象不能有所更改
- 引用:引用是一個對象的另一個名字,引用的出現(xiàn)主要是為了函數(shù)的參數(shù)和返回值
引用到底有什么作用???????
- 引用與指針的區(qū)別:
- 引用必須不能為NULL,但是指針可以為NULL;所以指針需要做NULL檢查,但是指針不需要
- 引用必須初始化,且引用指向一個對象后,就不能再指向其他對象
- 引用的一個簡單的實現(xiàn)就是常量指針
- 址傳遞和引用傳遞看起來一樣,為什么還要用引用傳遞?
- 實際上"引用"可以做的任何事情"指針"也都能夠做,為什么還要"引用"這東西? 答案是"用適當?shù)墓ぞ咦銮∪缙浞值墓ぷ?。
- 指針能夠毫無約束地操作內(nèi)存中的任何東西,盡管指針功能強大,但是非常危險。
- 如果的確只需要借用一下某個對象的"別名",那么就用"引用",而不要用"指針",以免發(fā)生意外。
- 指向void的指針:一個指向任何對象類型的指針都可以賦給類型為void*的變量。對void*做其他任何操作都會引起編譯錯誤,要使用void*,就必須顯示地轉(zhuǎn)換到某個指向特定類型的指針。
- struct
- 數(shù)組是相同類型元素的一個聚集,結(jié)構(gòu)體是各種元素的聚集
- struct的定義大括號{ }結(jié)束時必須在括號后有分號
- 結(jié)構(gòu)體對象的大小并不是簡單的其成員的大小之和,因為結(jié)構(gòu)體對象具有對齊的性質(zhì)