C语言的const关键字与指针搭配使用

C语言的const关键字与指针搭配使用,const是C语言中保留的一个关键字,它用来限定一个变量是只读的,即不可变的。程序中使用const可以在一定程度上提高程序的健壮性,但是程序中使用过多的const,可能在对代码的阅读时增加一定的难度。
(1)用const修饰一般变量
注意在C语言中,用const修饰的变量必须在声明时进行初始化(用来修饰函数的形参除外);
如:
const int n; 这种声明方式是错误的
const int n=5; 正确
void fun(const int n); 正确
const char a; 错误
char * const p; 错误
const char *p;正确(注意这种为什么是正确的),因为这里const是修饰p指向的变量,而不是指针变量p本身
一旦一个变量被const修饰后,在程序中除初始化外对这个变量进行的赋值都是错误的。
如:
const int n=5;
n=3; 错误
(2)const与指针搭配使用
首先必须弄清楚两个基础概念:指针常量和常量指针
指针常量:即指针本身的值是不可改变的,而指针指向的变量的值是可以改变的;
常量指针:即指针指向的变量的值是不可改变的,而指针本身的值是可以改变的;
可以这样去理解:因为指针本身也是一个变量,只不过指针存放的是地址而已,而一旦指针变成了常量,即指针本身的值是不可变的,此时指针只能指向固定的存储单元;指针一般会指向一个变量,如果该变量成为一个常量,那么该变量的值就不能被修改,即常量指针,指针指向的是一个不可变的变量。
如:
1 int a=3;2 const int *p=a;3 int const *p1=a;4 *p=4;5 a=4; 第2行和第3行是等价的;
第四行是错误的,因为用const限定p指向的变量的值是不可修改的,即不可通过指针p去修改变量a的值;
第五行是正确的,因为a本身没用const进行修饰,即a本身的值是可以修改的.
1 int a=1; 2 int b=2; 3 const int *p; 4 int const *p1; 5 int * const p2; 6 int * const p3=b 7 p=a; 8 p1=a; 9 p2=b;10 p3=a; 第3、4、7、8行是正确的;
第5行是错误的,第6行是正确的,第10行是错误的,因为const在'*'后面,表示是来修饰指针变量本身,因此在声明时必须进行初始化,并且在后面不能再指向其它的变量.
#includestdio.hint main(void){ const int a=3; int *pa=a; *pa=4; printf("%d
",*pa); printf("%d
",a); return 0;}编译结果:e:\c++estest.c(6) : warning C4090: 'initializing' : different 'const' qualifiers输出结果是: 4
4
从这里可以看出a的值被修改了,在C语言中用const去修饰整形变量a,即a的值是不可变的,不能显示地通过赋值语句去改变a的值,
但是不代表在程序中不能通过其它方法来修改这个值。
总结:(1)在C语言中用const去修饰一个变量,表示这个变量是只读的,不可通过显式的调用a去修改a的值,并且此时a仍然是一个变 量,不能等同于常量;
(2)要注意const在声明变量时所处的位置,位置不同,在意义上可能会有很大的不同。
如果const在'*'左边,则表示指针指向的变量的值不可变;
如果const在'*'右边,则表示指针的值是不可变的;


  • C++涓璫onst浠涔堟剰鎬?
    绛旓細鍦ㄦ爣鍑咰++涓紝杩欐牱瀹氫箟鐨勬槸涓涓父閲忥紝鐢ㄦ潵淇グ鍐呯疆绫诲瀷鍙橀噺锛岃嚜瀹氫箟瀵硅薄锛屾垚鍛樺嚱鏁帮紝杩斿洖鍊硷紝鍑芥暟鍙傛暟銆const浣跨敤锛堢被鍨嬶級:1銆佺敤浜鎸囬拡鐨勪袱绉嶆儏鍐:const鏄竴涓乏缁撳悎鐨勭被鍨嬩慨楗扮.int const*A;//A鍙彉,*A涓嶅彲鍙 int*const A;//A涓嶅彲鍙,*A鍙彉 2銆侀檺瀹氬嚱鏁扮殑浼犻掑煎弬鏁:void function(const int ...
  • c++瀹氫箟涓涓父閲忕殑鍏抽敭瀛
    绛旓細C++涓璫onst鍏抽敭瀛鏄痗onstant鐨勭缉鍐欙紝閫氬父缈昏瘧涓哄父閲忋佸父鏁扮瓑锛屾湁浜涙湅鍙嬩竴鐪嬪埌const鍏抽敭瀛楅┈涓婂氨鎯冲埌浜嗗父閲忋備簨瀹炰笂鍦C璇█涓璫onst鍔熻兘寰堝己澶э紝瀹冨彲浠ヤ慨楗板彉閲忋佹暟缁勩鎸囬拡銆佸嚱鏁板弬鏁扮瓑銆1銆 淇グ鍙橀噺锛欳璇█涓噰鐢╟onst淇グ鍙橀噺锛屽姛鑳芥槸瀵瑰彉閲忓0鏄庝负鍙鐗规э紝骞朵繚鎶ゅ彉閲忓间互闃茶淇敼銆備妇渚嬭鏄庡涓嬶細const ...
  • c璇█const鏄粈涔堟剰鎬
    绛旓細鍦C璇█涓锛宑onst鏄竴涓叧閿瓧锛岃〃绀哄父閲忕殑鎰忔濄傛湰璐ㄤ笂锛宑onst鏄敤浜庨檺鍒朵竴涓彉閲忕殑鍊间笉鍙洿鏀圭殑銆傚湪瀹氫箟鍙橀噺鏃讹紝鍙互浣跨敤const鍏抽敭瀛灏嗗叾瀹氫箟涓哄父閲忥紝涓鏃﹀畾涔夊畬鎴愪箣鍚庯紝渚挎棤娉曚慨鏀瑰叾鍊笺傝繖绉嶅仛娉曞彲浠ラ伩鍏嶅洜鎰忓閿欒鑰屼慨鏀逛簡鍙橀噺鐨勫硷紝浠庤屽鑷寸▼搴忓嚭鐜颁笉鍙鏈熺殑缁撴灉銆俢onst杩欎釜鍏抽敭瀛楀湪C璇█涓捣鍒扮殑...
  • c++涓璫onst鐨勪綔鐢ㄦ槸浠涔?
    绛旓細const鍏抽敭瀛鑷冲皯鏈変笅鍒梟涓綔鐢細锛1锛夋闃绘涓涓彉閲忚鏀瑰彉锛屽彲浠ヤ娇鐢╟onst鍏抽敭瀛椼傚湪瀹氫箟璇onst鍙橀噺鏃讹紝閫氬父闇瑕佸瀹冭繘琛屽垵濮嬪寲锛屽洜涓轰互鍚庡氨娌℃湁鏈轰細鍐嶅幓鏀瑰彉瀹冧簡锛涳紙2锛夊鎸囬拡鏉ヨ锛屽彲浠ユ寚瀹氭寚閽堟湰韬负const锛屼篃鍙互鎸囧畾鎸囬拡鎵鎸囩殑鏁版嵁涓篶onst锛屾垨浜岃呭悓鏃舵寚瀹氫负const锛涳紙3锛夊湪涓涓嚱鏁板0鏄庝腑锛宑onst...
  • c璇█閲const int 鍜宨nt 鏈変粈涔堝尯鍒,const鐨勪綔鐢ㄦ槸浠涔堛
    绛旓細涓銆const int 鍜宨nt 鐨勫尯鍒 1銆佽繑鍥炲 const int & 鏄繑鍥炶繖涓暟鍊肩殑涓涓父閲忕殑寮曠敤銆傝宨nt 鏄繑鍥炶繖涓暟鍊肩殑涓涓嫹璐濄俰nt 鏄繘琛屾嫹璐濇瀯閫狅紝鑰宑onst int & 鏄繑鍥炵殑寮曠敤銆傛嫹璐濇瀯閫犳洿娑堣楁椂闂达紝涓庢鍚屾椂杩樼敤鏋愭瀯鍑芥暟銆傚洜涓轰骇鐢熶簡涓涓嫹璐濓紝浣犲氨鍙互杞绘槗鍦颁慨鏀规嫹璐濈殑鍐呭銆2銆佸彇鎸囬拡 const int...
  • c璇█涓璫onst 鏄粈涔堟剰鎬,鎬庝箞鐢,浠涔堟椂鍊欑敤?
    绛旓細鏁版嵁绫诲瀷 *const 鎸囬拡鍙橀噺=鍙橀噺鍚 濡傦細char *const p="abc";const淇グ鐨勬槸鎸囬拡鍙橀噺锛岃屼笉鏄寚閽堢殑鍊硷紝鎵浠ユ寚閽堟寚鍚戠殑鍊兼槸鍙互淇敼鐨勩傚父鎸囬拡锛歝onst 鏁版嵁绫诲瀷 *鎸囬拡鍙橀噺=鍙橀噺鍚 鎴栬呮槸 鏁版嵁绫诲瀷 const *鎸囬拡鍙橀噺=鍙橀噺鍚 杩欐槸鎸囬拡鎸囧悜鐨勫煎氨鏄笉鍙互鏀瑰彉鐨勩傝繕鏈変竴绉嶆儏鍐靛氨鏄寚閽堝彉閲忔湰韬笉鍙互淇敼...
  • c璇█闂,杩欎簺鍑芥暟鍚庤竟璺涓const 鍟ユ剰鎬 姹傝В
    绛旓細锛坈锛const鎸囬拡鍙互鎺ュ彈const鍜闈瀋onst鍦板潃锛屼絾鏄潪const鎸囬拡鍙兘鎺ュ彈闈瀋onst鍦板潃銆傛墍浠onst鎸囬拡鐨勮兘鍔涙洿寮轰竴浜涳紝鎵浠ュ敖閲忓鐢╟onst鎸囬拡锛岃繖鏄竴绉嶄範鎯3.銆嬨嬶紙a锛const涓鍑芥暟銆傜敱浜2(c)锛屾墍浠ョ粡甯告妸鍑芥暟鐨勫舰鍙傜被鍨嬭涓篶onst锛岃屼笖澶氫负const 寮曠敤銆備絾鏄繖閲屾湁涓涓檺鍒讹紝涓嶈兘鎶婁笉鏄乏鍊肩殑鍦板潃浼犻掔粰寮曠敤...
  • 鍏充簬c璇█涓寚閽坈onst鐨勯棶棰(绠鍗曠殑銆傘),姹傚ぇ浣В绛,璋㈣阿!
    绛旓細const鍔犲湪*p鍓嶉潰鍙槸涓嶈兘閫氳繃*p淇敼鎸囧悜鐨刟鐨勫硷紝a鏈韩鍙堟病鍔燾onst锛屽綋鐒跺彲浠ユ敼銆
  • C璇█鍏抽敭瀛鏈夊摢浜?
    绛旓細C璇█鐨鍏抽敭瀛楀叡鏈32涓紝鏍规嵁鍏抽敭瀛楃殑浣滅敤锛屽彲鍒嗗叾涓烘暟鎹被鍨嬪叧閿瓧銆佹帶鍒惰鍙ュ叧閿瓧銆佸瓨鍌ㄧ被鍨鍏抽敭瀛楀拰鍏跺畠鍏抽敭瀛楀洓绫汇1 鏁版嵁绫诲瀷鍏抽敭瀛楋紙12涓級锛(1) char 锛氬0鏄庡瓧绗﹀瀷鍙橀噺鎴栧嚱鏁 (2) double 锛氬0鏄庡弻绮惧害鍙橀噺鎴栧嚱鏁 (3) enum 锛氬0鏄庢灇涓剧被鍨 (4) float锛氬0鏄庢诞鐐瑰瀷鍙橀噺鎴栧嚱鏁 (5) int锛...
  • const鍦c璇█涓殑鐢ㄦ硶
    绛旓細const鍦c璇█涓殑鐢ㄦ硶灏辨槸闄愬畾涓涓彉閲忎笉鍏佽琚敼鍙橈紝浜х敓闈欐佷綔鐢ㄣ俢onst鏄竴涓狢璇█锛圓NSI C锛夌殑鍏抽敭瀛锛屽叿鏈夌潃涓捐冻杞婚噸鐨勫湴浣嶃備娇鐢╟onst鍦ㄤ竴瀹氱▼搴︿笂鍙互鎻愰珮绋嬪簭鐨勫畨鍏ㄦу拰鍙潬鎬э紝鍙﹀鍦ㄨ鐪嬪埆浜轰唬鐮佺殑鏃跺欙紝娓呮櫚鐞嗚Вconst鎵璧风殑浣滅敤锛屽鐞嗚В瀵规柟鐨勭▼搴忎篃鏈変竴瀹氬府鍔┿俢onst鍦ㄥ叾瀹冪紪绋嬭瑷涓篃鏈夊嚭鐜帮紝...
  • 扩展阅读:扫一扫题目出答案 ... c语言const用法 ... c语言32个关键字 ... const关键字用法 ... c++编程 ... c语言const关键字的作用 ... c语言extern的用法 ... c++中<< ... const关键字的含义 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网