1、先看一個(gè)普通的指針使用。
形式:int *pTmp
含義:一個(gè)普通的指向int類型的指針
int main(int argc, char *argv[])
{
int i = 1;
int *pTmp = &i;
printf("pTmp = %d\n", *pTmp);
i = 2;
printf("pTmp = %d\n", *pTmp);
(*pTmp)++;
printf("pTmp = %d\n", *pTmp);
system("PAUSE");
return 0;
}
輸出:
pTmp = 1
pTmp = 2
pTmp = 3
請(qǐng)按任意鍵繼續(xù). . .
2、
形式:const int *pTmp
含義:表示pTmp所指向的對(duì)象是只讀的,但pTmp可指向其他地址,即pTmp可變。
int main(int argc, char *argv[])
{
int i = 1;
int j = 100;
const int *pTmp = &i; /*正確:表示pTmp所指向的對(duì)象是只讀的,但pTmp可指向其他地址,即pTmp可變*/
printf("pTmp = %d\n", *pTmp);
i = 2;
printf("pTmp = %d\n", *pTmp);
pTmp = &j; /*正確:將pTmp指向變量j的地址*/
printf("pTmp = %d\n", *pTmp);
(*pTmp)++; /*錯(cuò)誤,pTmp指向的對(duì)象是只讀的,編譯出錯(cuò)提示:assignment of read-only location */
printf("pTmp = %d\n", *pTmp);
system("PAUSE");
return 0;
}
3、
形式:int const *pTmp
含義:與2相同, 表示pTmp所指向的對(duì)象是只讀的,但pTmp可指向其他地址,即pTmp可變。
int main(int argc, char *argv[])
{
int i = 1;
int j = 100;
const int *pTmp = &i; /*正確:表示pTmp所指向的對(duì)象是只讀的,但pTmp可指向其他地址,即pTmp可變*/
printf("pTmp = %d\n", *pTmp);
i = 2;
printf("pTmp = %d\n", *pTmp);
pTmp = &j; /*正確:將pTmp指向變量j的地址*/
printf("pTmp = %d\n", *pTmp);
(*pTmp)++; /*錯(cuò)誤,pTmp指向的對(duì)象是只讀的,編譯出錯(cuò)提示:assignment of read-only location */
printf("pTmp = %d\n", *pTmp);
system("PAUSE");
return 0;
}
4、
形式:int * const pTmp
含義:pTmp不可修改,但pTmp所指向的對(duì)象可以修改。
int main(int argc, char *argv[])
{
int i = 1;
int j = 100;
int * const pTmp = &i;
printf("pTmp = %d\n", *pTmp);
i = 2;
printf("pTmp = %d\n", *pTmp);
pTmp = &j; /*錯(cuò)誤,pTmp不可修改,編譯提示:error:assignment of read-only variable `pTmp'*/
printf("pTmp = %d\n", *pTmp);
(*pTmp)++; /*正確,pTmp所指向的對(duì)象可以修改 */
printf("pTmp = %d\n", *pTmp);
system("PAUSE");
return 0;
}
5、
形式:const int * const pTmp
含義:pTmp不可修改,pTmp所指對(duì)象也不能修改。
int main(int argc, char *argv[])
{
int i = 1;
int j = 100;
const int * const pTmp = &i;
printf("pTmp = %d\n", *pTmp);
i = 2; /*正確*/
printf("pTmp = %d\n", *pTmp);
pTmp = &j; /*錯(cuò)誤:error: assignment of read-only variable `pTmp'*/
printf("pTmp = %d\n", *pTmp);
(*pTmp)++; /*錯(cuò)誤:error: increment of read-only location*/
printf("pTmp = %d\n", *pTmp);
system("PAUSE");
return 0;
}
6
int main(int argc, char *argv[])
{
int a = 3;
int b;
/*定義指向const的指針(指針指向的內(nèi)容不能被修改)*/
const int* p1;
int const* p2;
/*定義const指針(由于指針本身的值不能改變所以必須得初始化)*/
int* const p3 = &a;
/*指針本身和它指向的內(nèi)容都是不能被改變的所以也得初始化*/
const int* const p4 = &a;
int const* const p5 = &b;
p1 = p2 = &a; //正確
*p1 = *p2 = 8; //不正確(指針指向的內(nèi)容不能被修改)
*p3 = 5; //正確
p3 = p1; //不正確(指針本身的值不能改變)
p4 = p5;//不正確 (指針本身和它指向的內(nèi)容都是不能被改變)
*p4 = *p5 = 4; //不正確(指針本身和它指向的內(nèi)容都是不能被改變)
return 0;
}
const指針精華
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- const 使用const關(guān)鍵字來(lái)修改變量聲明和初始化,創(chuàng)建常量的通用格式如下: 值得注意的是 const in...
- 請(qǐng)看下面三種定義: const char *p; char const *p; char * const p; 請(qǐng)...
- 一、函數(shù)特殊參數(shù) 數(shù)組做函數(shù)參數(shù) char數(shù)組(或字符串)換成其他類型如int、double數(shù)組,也都一樣。arr...
- const修飾指針無(wú)非三種情況:(1) const char * p(2) char const * p(3...
- 如果函數(shù)參數(shù)是指針,且僅作輸入用,則必須在類型前面加上const,以用來(lái)防止該指針在函數(shù)體內(nèi)被意外修改。 舉個(gè)例子...