網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
在面試中我們經(jīng)常會(huì)被面試官問到什么是常量指針,什么又是指針常量。
指針常量就是指針本身是常量,指針里面所存儲(chǔ)的內(nèi)容(內(nèi)存地址)是常量,不能改變。但是,對(duì)應(yīng)內(nèi)存地址里存的內(nèi)容是可以通過指針改變的。
常量指針就是指向常量的指針,指針中所存地址中對(duì)應(yīng)的值是常量,不能通過指針來(lái)修改它的值。但是,指針自身不是常量,它自身的值可以改變,從而指向另一個(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ò)提示 無(wú)法將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ò) 常量指針指向無(wú)法改變 *e=2; //此時(shí)a的值已經(jīng)變?yōu)? e值不變 *e改變也就是a值改變 //g=&b; //報(bào)錯(cuò)指針指向無(wú)法改變 //*g=1; //報(bào)錯(cuò)指向的地址中的值是個(gè)常量無(wú)法改變 //h=&a; //報(bào)錯(cuò)指針指向無(wú)法改變 //*h=1; //報(bào)錯(cuò)指向的地址中的值是個(gè)常量無(wú)法改變 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;//指向常量的指針常量
原文鏈接:https://blog.csdn.net/m0_57882370/article/details/121858366
相關(guān)推薦
- 2022-10-22 C++中vector的常用接口詳析說(shuō)明_C 語(yǔ)言
- 2022-10-03 Android使用AudioRecord實(shí)現(xiàn)錄音功能_Android
- 2022-07-16 git查看和修改用戶名和郵箱
- 2022-11-28 基于Python實(shí)現(xiàn)DIT-FFT算法_python
- 2022-05-08 Python+matplotlib實(shí)現(xiàn)堆疊圖的繪制_python
- 2022-10-26 C語(yǔ)言實(shí)現(xiàn)自行車管理系統(tǒng)_C 語(yǔ)言
- 2022-07-14 一文教會(huì)你用redux實(shí)現(xiàn)computed計(jì)算屬性_React
- 2022-02-09 C語(yǔ)言指針用法總結(jié)_C 語(yǔ)言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支