前兩天在網上看到華為的一些筆試題,對基礎的掌握仍然是這種大公司所重視的。其間對指標掌握的要求比較多,有一道是關於const指標的。看到那道題,回來整理了一些有關const指標的內容,分享一下。
const說明指標變數,組合的情況可能會顯得很複雜。使用指標時要涉及兩個目標,即指標本身和指標所指的物件。關於const指標變數,可歸結為以下三種:
1.指向常量的指標變數;
2.常指標變數;
3.指向常量的常指標變數。
下面來分別談談這三種情況。
一、指向常量的指標變數:
宣告格式: const type * var_name;
或 type const * var_name;
特點: 可改值。
將指標宣告冠以const,使指向的物件為常量,而不是指標為常量。注意:指向常量的指標不一定指向真正的常量,它也可以指向常量,只是從該指標的角度來看,它所指向的物件是常量,通過該指標不能修改它指向的物件。它還可以指向其它的物件,可以不初始化。
-----eg:
int a = 0,b = 1;
const int c = 3;
const int* pi; //等同於 (const int*) pi;
pi = &a;
*pi = 10; //錯誤:不能修改它指向的物件。
a = 10;
pi = &b;
*pi = &b;
*pi = 20; //錯誤:不能修改它指向的物件。
b = 20;
pi = &c;
*pi = &c;
*pi = 30; //錯誤:不能修改它指向的物件。
-----eg2:
const char* pc = "asdf";
pc[3] = 'a'; //錯誤:不能修改它指向的物件。
pc = "ghik";
-----eg3:
const char* step[3] =
;step[2] = "skip";
step[2][1] = 'i'; //錯誤:不能修改它指向的物件。
二、常指標常量:
宣告格式: type* const var_name;
特點: 可改物件。
要把指標本身,而不是它指向的物件宣告為常量,採用運算子 *const,必須初始化,通過該指標可以修改它指向的物件,但它不可以指向其他的物件。
-----eg:
int a = 0,b = 1;
int* const pi = &a; //等於 int* (const pi) = &a;
*pi = 10;
pi = &b; //錯誤:pi本身為常量,不能指向其他物件。
三、指向常量的常指標變數:
宣告格式: const type * const var_name;
特點: 值與物件均不能改。
要使兩個目標都是常量,兩者都要宣告為 const 。
eg:int a = 0,b = 1;
const int c = 3;
const int* const pi = &a; //相當於: (const int*)(const pi) = &a;
*pi = 10; //錯誤:不能修改它的物件。
a = 10;
pi = &b; //錯誤:不能指向其它物件。
eg2:
const char* const pc = "asdf";
pc[3] = 'a'; //錯誤:不能修改它的物件。
pc = "ghik"; //錯誤:不能指向其它物件。
eg3:
const char* const step[3] =
;step[2] = "skip"; //錯誤:不能指向其它物件。
step[2][1] = 'i'; //錯誤:不能修改它的物件。
一般的,當宣告中出現 const 描述符時,它修飾的是緊跟其後的宣告元素或者在 const 成員函式宣告中函式的 this 指標。
注意:可以將變數的位址賦給指向常量的指標變數,不會因此有什麼害處,但是,常量的位址不能賦給無約束的指標。
eg:int a = 1;
const int c = 2;
const int* p1 = &c;
const int* p2 = &a;
int* p3 = &c; //非法!
int* const p4 = &c; //非法! 指標常量 p4 能夠改值。
const int* const p5 = &c;
指標的一些總結
2016年9月14日 指標陣列和陣列指標 指標陣列是指 陣列元素都是指標 int ptr 5 int a 2,b 3,c 6,p,q p a q b ptr 0 a 存入的是a的位址 ptr 1 b ptr 2 c cout ptr 0 ptr 0 endl cout ptr 1 ptr 1 end...
關於const引用 常量指標 指標常量的一些知識
應該將不需要修改的引用形參定義為const引用。普通的非const引用形參在使用時不太靈活。這樣的形參既不能用const物件初始化,也不能用字面值或者產生右值的表示式實參初始化,如下所示 int incr int val int main 理解返回引用至關重要的是 千萬不能返回區域性變數的引用。當然...
關於指標的一些總結
指標和陣列一樣,都是基於其它型別的。指標的宣告 int p updates 運算子兩邊的空格是可選的。對每個指標變數命名,都需要乙個 變數名,為取址,它的值為變數的位址 32位 指標變數,為指標儲存的位址所儲存的值。可以通過改變它來改變。malloc 可以分配記憶體,但c 更好的方法是使用new。i...