const與指標的組合使用

2021-10-06 17:34:55 字數 1133 閱讀 3972

一.const與指標組合使用的幾種情況分析:

定義 int a=1;int b=2;

1.int const *p = const int *p;//p本身可變,但其指向的int型資料值不可變

理解:p是乙個指標變數,指標就是位址,因此p儲存的就是位址,此處的定義形式表示p本身是可變的,也就是p的值(位址)是可變的的,但不能修改p(位址)中存放的值,也就是p可變,但是*p不可變。

因此:int const *p=&a; p=&b;使用正確,因為p本身(位址)可變。

int const *p=&a; *p=3;使用錯誤,因為p指向的值(位址裡的值)不可變。

2.int * const p;//p本身不可變,但其指向的int型資料值可變

理解:p本身的值就是乙個位址,因此const p表示p(位址)不可變,但p指向的資料(位址裡存的值)是可變的也就是p不可變,但*p是可變的。

因此:int * const p=&a; *p=3;使用正確,因為*p(位址裡的內容)可變。

int * const p=&a; p=&b;使用錯誤,因為p本身(位址)不可變。

3.const int * const p;//p本身不可變,p指向的int型資料值也不可變

理解:結合上面兩種情況就不難分析,此時p自身(位址)不可變,且指向的資料值(位址裡的值)也不可變。

因此:const int * const p=&a; *p=3;使用錯誤,因為*p(位址裡的內容)不可變。

const int * const p=&a; p=&b;使用錯誤,因為p(位址裡)本身不可變。

總結:const修飾指標具有很廣泛的用途,例如在做字串陣列copy時會用到:void stcopy(char *des,const char *src);此處使用const做修飾是不希望src陣列的值在函式中被改變。

對於const與指標組合使用形式的記憶有如下方法:主要看const是直接修飾p還是*p,簡單說就是看const 修飾符是在*前面還是後面,自行體會。

const和指標的組合

const 限定乙個物件為唯讀屬性 一級指標 1 const char p 限定p為唯讀。p值不能變。2 const char p 限定 p為唯讀。p的操作合法。3 char const p 限定p為唯讀。p的操作合法。4 const char const p 限定p和 p都為唯讀,不能改寫。二級指...

const 指標與指向const的指標

當使用帶有const的指標時其實有兩種意思。一種指的是你不能修改指標本身的內容,另一種指的是你不能修改指標指向的內容。聽起來有點混淆一會放個例子上來就明白了。先說指向const的指標,它的意思是指標指向的內容是不能被修改的。它有兩種寫法。const int p 推薦 int const p 第一種可...

const 指標與指向const的指標

當使用帶有const的指標時其實有兩種意思。一種指的是你不能修改指標本身的內容,另一種指的是你不能修改指標指向的內容。聽起來有點混淆一會放個例子上來就明白了。先說指向const的指標,它的意思是指標指向的內容是不能被修改的。它有兩種寫法。const int p 推薦 int const p 第一種可...