C語(yǔ)言中指針常量和常量指針的區(qū)別
在面試中我們經(jīng)常會(huì)被面試官問到什么是常量指針,什么又是指針常量。
指針常量就是指針本身是常量,指針里面所存儲(chǔ)的內(nèi)容(內(nèi)存地址)是常量,不能改變。但是,對(duì)應(yīng)內(nèi)存地址里存的內(nèi)容是可以通過指針改變的。
常量指針就是指向常量的指針,指針中所存地址中對(duì)應(yīng)的值是常量,不能通過指針來修改它的值。但是,指針自身不是常量,它自身的值可以改變,從而指向另一個(gè)地址。
指針常量與常量指針的聲明
指針常量的聲明:數(shù)據(jù)類型 * const 變量名。
常量指針的聲明:數(shù)據(jù)類型 const * 變量名 或者 const 數(shù)據(jù)類型 *變量名。
常量指針常量的聲明:數(shù)據(jù)類型 const * const 變量名或者 const 數(shù)據(jù)類型 * const 變量名。
指針常量與常量指針的使用
1.指針常量例子
/*指針常量*/
/*聲明方式*/
int a;
int *const b = &a; //const放在指針聲明操作符的右側(cè)
/*例子*/
int a=0,b=0;
int * const p=&a;
p = &b;//錯(cuò)誤
*p = 5;//正確2.常量指針例子
/*常量指針*/
/*聲明方式*/
//1)
const int *p;
//2)
int const *p;
/*例子*/
int a=0,b=0;
int const *p=&a;
p = &b;//正確
*p = 5;//錯(cuò)誤3.常量指針常量
/*常量指針常量*/
/*聲明方式*/
const int a = 5;
const int * const p = &a; //a值不變,b的指向也不能變
/*例子*/
int b = 2;
int a = 5;
const int * const p = &a;
p=&b;//錯(cuò)誤
*p=2;//錯(cuò)誤 例
int a = 5;
const int b = 6;
const int *c = &a; // c是指向整形變量a的常量指針
const int *d = &b; // d是指向整形常量b的常量指針
int *const e = &a; // e是指向整形變量a的指針常量
//int *const f = &b; //報(bào)錯(cuò)提示 無法將const int*賦值給 int *
const int *const g = &a; // g是指向整形變量a的指針常量
const int *const h = &b; // h是指向整形常量b的指針常量
printf("a:%d b:%d\n*c:%d c:%d\n*d:%d d:%d\n*e:%d e:%d\n*g:%d g:%d\n*h:%d h:%d\n",a,b,*c,c,*d,d,*e,e,*g,g,*h,h);
a=3;
c=&b; //改變c的指向?yàn)閎 c值改變 *c改變
//*c=b; //報(bào)錯(cuò)*c是常量
d=&a; //改變d的指向?yàn)閍 d值改變 *d改變
//*d=a; //報(bào)錯(cuò)*d是常量
//e=&b; //報(bào)錯(cuò) 常量指針指向無法改變
*e=2; //此時(shí)a的值已經(jīng)變?yōu)? e值不變 *e改變也就是a值改變
//g=&b; //報(bào)錯(cuò)指針指向無法改變
//*g=1; //報(bào)錯(cuò)指向的地址中的值是個(gè)常量無法改變
//h=&a; //報(bào)錯(cuò)指針指向無法改變
//*h=1; //報(bào)錯(cuò)指向的地址中的值是個(gè)常量無法改變
printf("改變后\n");
printf("a:%d b:%d\n*c:%d c:%d\n*d:%d d:%d\n*e:%d e:%d\n*g:%d g:%d\n*h:%d h:%d\n",a,b,*c,c,*d,d,*e,e,*g,g,*h,h);程序的輸出結(jié)果:

(可以嘗試一下把代碼中的*e=2注釋掉會(huì)發(fā)生什么)
總結(jié):
指針常量,指向地址不可變,地址中的值可通過指針改變
常量指針,指向地址中的值不可通過指針改變,指向可變
常量指針常量,指向和指向地址的值都不可通過指針改變
附加題
指向常量的指針常量該怎么寫?
答案:
const int * const b = &a;//指向常量的指針常量
到此這篇關(guān)于C語(yǔ)言中指針常量和常量指針的區(qū)別的文章就介紹到這了,更多相關(guān)C語(yǔ)言中指針常量和常量指針內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
基于Matlab制作一個(gè)數(shù)獨(dú)求解器
這篇文章主要為大家詳細(xì)介紹了如何利用Matlab制作一個(gè)數(shù)獨(dú)求解器,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下2022-05-05
使用pybind11封裝C++結(jié)構(gòu)體作為參數(shù)的函數(shù)實(shí)現(xiàn)步驟
這篇文章主要介紹了用pybind11封裝C++結(jié)構(gòu)體作為參數(shù)的函數(shù)實(shí)現(xiàn)步驟,本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
對(duì)比C語(yǔ)言中g(shù)etc()函數(shù)和ungetc()函數(shù)的使用
這篇文章主要介紹了對(duì)比C語(yǔ)言中g(shù)etc()函數(shù)和ungetc()函數(shù)的使用,是C語(yǔ)言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-08-08

