conference pointer and const
cppp p45-60
引用,也就是為了給變數取別名,因此,他引用的是變數名、表示式而不是常量;同時,引用必須要初始化,一旦引用完成,引用將和它的初始值物件一直繫結在一起,不能將引用重新繫結在另乙個物件上;不能定義引用的引用。但是可以有一例外:
const &p = 10 ; 是合法的
需要特別理解注意:引用不是物件。所以沒有引用的引用,因為,引用無法再引用乙個已經引用了的變數(它此時不是物件了)。
指標,也就是將用一變數直接指向一記憶體中的位址,它必須要賦初始值(在
c++中所有的定義的變數都是要賦初始值的
),空時,可以指向
ullptr
;指標及其指向的記憶體位址中的變數可以改變值;無返回型別時,可以定義為
void*
。指標其實也是一種型別,所以可以叫為「指標變數」,它是一物件,所以有指向指標的指標,它的意義是記憶體的多重指向。
還有,如果定義了指標
int*p = q ;
那麼在後面,
*p其實就是代表指向
q的記憶體位址的值,也就是等價於
q(在取值上),
*是解引用符號;
p其實就是指標(變數)。還有如果
int *j = nullptr; ,
那麼,w = j ;
語句就是將
w指標與
j指標等起來,所以
w 就是
p 了(在指標指向的記憶體位址上,也就是
q的值上)。
補充:關於指標的值的問題
指向乙個物件
*p = q;
指向緊鄰物件所佔空間的下乙個位置
在鍊錶中
空指標,意味著指標沒有指向任何物件
*p = nullptr;
無效指標,也就是以上之外:-
(沒遇到過?
也就是說指標的錯誤用法吧,也許
引用就是將乙個值、變數、表示式「固化」到乙個變數、引用、指標上。注意,它必須要初始化。與引用和指標不同的是,一旦「固化」了,那麼,不可以將它再改值。同理,
const
的引用固化引用,不可改,但是有一特例:
const int &p = 10;//ok
,因為p
是乙個「常量引用」
int&p = 10 ;//error,
因為引用型別的初始值必須要是乙個物件
同時,注意在
const
中對引用、指標的兩兩之間的同一操作關係,就好比如
double
變數從語法上來講必須與同是
double
型別的變數來進行賦值、代數運算等等。
頂層const
,也就是不可改的固定死的
const,
而底層const
,是可以改變的
,一般的底層的底層
const
是跟指標一起使用的。在多重的
const
限定符、引用和指標中,看除基本變數型別外的最左邊的修飾符,其他的是對這個(基本型別
+第一修飾符的)變數的多層修飾,也就是說,從右向左讀變數的修飾符即可。例如:
inti = 0;
int*const pi = &i ;//
頂層const
,不能改變
p1的值
constint ci = 42;//
頂層const
,不能改變
ci的值
cosntint *p2 = &c1 ;//
底層const ,
可以改變
p2的值
constint *const p3 = p2 ;
//靠左的
const
是底層const ,
靠右的const
的是頂層
const
cosntint &r = ci;//
用於宣告引用的
const
都是底層
const
常量表示式,也就是,「常量」的「表示式」,即是
const +
基本資料型別,必須初始化!!!!。只要變數是乙個常來那個表示式,那麼就應該宣告為
constexpr
型別,但是應該是簡單的字面值型別(算數型別、引用和指標),而類、
io庫、
string
庫等都不是。在
constexpr
與指標中,初始值只能夠是
nullptr
或者是0
,同時,在
constexpr
中,限定的只是對指標有效,而對指標所指的物件無關,例如:
constint *p =nullptr ;//p
是乙個指向整型常量的指標
constexprint *q = nullptr;//q
是乙個指向整數的常量指標
也就是說,
p是乙個「指向常量的指標」,而
q是乙個「常量指標」,
constexpr
把它所定義的物件置為頂層
const
。附:以上相關的見下**:
#include
intmain()
C (二)引用和指標
引用不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名。定義的格式是 型別 引用變數名 已定義過得變數名 引用的特點 1 乙個變數可以取多個別名 2 引用必須初始化 3 引用只能在初始化的時候引用一次,不能改變為再引用其他的變數。include using namespace std vo...
C 複習(1) 引用和指標的區別
引用在定義時必須初始化,而指標沒有要求。引用在初始化時引用乙個實體後,就不能再引用其他實體,而指標可以在任何時候指向任何乙個同型別實 體。沒有null引用,但有null指標。在sizeof中含義不同 引用結果為引用型別的大小,但指標始終是位址空間所佔位元組個數 32位平台下佔4 個位元組 引用自加即...
C和C 面試秘笈三 引用和指標(1)
引用是c 引入的新語言特性,正確 靈活地使用引用,可以使程式簡潔高效。一 一般變數的引用 引用只是給變數起了乙個別名,它們兩個儲存在同乙個儲存單元,具有同一位址。來看下面的 int a 10 int b 20 int rn a int equal rn b cout a a endl cout b ...