目錄
const的五種使用情況
const的使用本質
總體**
const在c與c++中是不同的,
先看兩種寫法:
const int a;
int const b;
這兩種寫法都是對的,也是一樣的,代表乙個整型變數不能被修改。
再看:
const char *c;
char * const d;
這兩種寫法也是對的,但代表的意義是不一樣的。其中,c是乙個指向常整形數的指標(所指向的記憶體資料不能被修改,但是本身可以修改);d 是乙個常指標(指標變數不能被修改,但是它所指向記憶體空間可以被修改)等同於定義乙個"char buf[100]"
總結:先要明白指標變數和它所指向的記憶體空間變數,是兩個不同的概念,那麼看const的時候,就看是針對的是指標變數還是針對的是指標變數指代的記憶體空間。
看const 是放在*的左邊還是右邊 看const是修飾指標變數,還是修飾所指向的記憶體空變數
還有最後乙個用法:
const char * const e ;
這麼寫,意味著e是乙個指向常整形的常指標(指標和它所指向的記憶體空間,均不能被修改)
下面舉例說明:
void getmeml201(const char *p)
這段**和上面的變數d是一種情況,指標指向的記憶體空間不能被修改,所以,在這段**中修改p本身這個指標變數,是不會報錯的,但修改p[1],即p指向的記憶體空間,就會報錯。
同理,把const修改是部分變成指標變數,上面的這種情況,就正好反了過來:
void getmeml202(char const *p)
要是,都給const住了,就只能拿值,不能改值了:
void getmeml203(const char const *p)
另外,總結網上的對const與指標聯用的經典解釋:
特別注意,const int *p 與 int const *p是一樣的,const所修飾的物件都是*p
那麼下面再看乙個:
void main()
這樣是不能被修改的,因為a被const給限定了,但是:
void main()
通過引用指標的方式,再去改變a,竟然成功了!這說明,在c語言裡面,const是乙個偽命題,是乙個冒牌貨,並非如我們所想象的那樣穩定,c語言中的const修飾的變數,是假的!
#define _crt_secure_no_warnings
#include #include #include void getmeml201(const char *p)
void getmeml202(char const *p)
void getmeml203(const char const *p)
void main01()
void main()
printf("hello...\n");
system("pause");
return ;
}
函式形參 指標,引用,const,陣列形參
指標也是物件,也會拷貝,所以分實參指標和形參指標。在傳進函式時,實參進行拷貝,所以在函式裡改變指標值不影響實參。void reset int ip 引用不是物件,通過引用可以改變實參 void reset int i 使用引用的好處是避免了拷貝。其實也只是兩個變數名的傳遞,和變數規則一致,如果在函式...
函式形參中的const引用
這裡將c primer中函式形參章節有關const和引用的問題簡單小結如下 一 非const非引用形參 這個是乙個平庸的情形。函式引數通過複製對應的實參實現初始化,函式本身對形參的修改不會影響到實參。傳遞給這類函式的實參可以是乙個const型的物件,也可以是非const的物件。乙個需要注意的事情是,...
函式過載 const形參 預設實參
過載 同乙個作用域內的幾個函式名字相同但是形參列表不同,我們稱之為過載 overload 不能定義兩個函式除了返回型別外其他所用的要素都相同。過載和const形參 預設實參 呼叫含有預設實參的函式時,可以包含該實參,也可以省略該實參。注意,一旦某個形參被賦予了預設值,它後面的所有形參都必須有預設值。...