Record19 const做函式引數

2021-10-01 22:03:41 字數 1920 閱讀 1466

目錄

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形參 預設實參 呼叫含有預設實參的函式時,可以包含該實參,也可以省略該實參。注意,一旦某個形參被賦予了預設值,它後面的所有形參都必須有預設值。...