const常量和宏变量的区别 const常量和#define宏常量的区别

const\u5b9a\u4e49\u5e38\u91cf\u4e0e\u5b8f\u5b9a\u4e49\u7684\u533a\u522b\uff0c\u8be6\u7ec6\u4e00\u70b9\u7684

#define\u4e0econst\u7684\u5dee\u522b
\u6587\u7ae0\u6536\u85cf, \u7f51\u4e0a\u8d44\u6e90
zhu_ruixian \u53d1\u8868\u4e8e 2007-3-27 14:32:23

\u867d\u7136\u4ed6\u4eec\u5728\u4f7f\u7528\u4e2d\u611f\u89c9\u201c\u5dee\u4e0d\u591a\u201d\uff0c\u4f46\u662f\u4ed6\u4eec\u5728\u5b9e\u73b0\u4e0a\u6709\u4ec0\u4e48\u533a\u522b\uff1f

\u8bf7\u770b\u4e0b\u9762\u7684\u4ee3\u7801\uff1a

#define T 13 /*\u7528#define\u5b9a\u4e49\u7684\u4e00\u4e2a\u5e38\u91cfT*/

int main()

{

const int t=13;/*\u7528const\u5b9a\u4e49\u7684\u4e00\u4e2a\u5e38\u91cf*/

int n=t;/*\u628at\u8d4b\u503c\u7ed9n*/

int m=T;/*\u628aT\u8d4b\u503c\u7ed9m*/

}

1.\u5dee\u522b:

const\u4e0e#define\u6700\u5927\u7684\u5dee\u522b\u5728\u4e8e\uff1a\u524d\u8005\u5728\u5806\u6808\u5206\u914d\u4e86\u7a7a\u95f4\uff0c\u800c\u540e\u8005\u53ea\u662f\u628a\u5177\u4f53\u6570\u503c\u76f4\u63a5\u4f20\u9012\u5230\u76ee\u6807\u53d8\u91cf\u7f62\u4e86\u3002\u6216\u8005\u8bf4\uff0cconst\u7684\u5e38\u91cf\u662f\u4e00\u4e2aRun-Time\u7684\u6982\u5ff5\uff0c\u4ed6\u5728\u7a0b\u5e8f\u4e2d\u786e\u786e\u5b9e\u5b9e\u7684\u5b58\u5728\u53ef\u4ee5\u88ab\u8c03\u7528\u3001\u4f20\u9012\u3002\u800c#define\u5e38\u91cf\u5219\u662f\u4e00\u4e2aCompile-Time\u6982\u5ff5\uff0c\u5b83\u7684\u751f\u547d\u5468\u671f\u6b62\u4e8e\u7f16\u8bd1\u671f\uff1a\u5728\u5b9e\u9645\u7a0b\u5e8f\u4e2d\u4ed6\u53ea\u662f\u4e00\u4e2a\u5e38\u6570\u3001\u4e00\u4e2a\u547d\u4ee4\u4e2d\u7684\u53c2\u6570\uff0c\u6ca1\u6709\u5b9e\u9645\u7684\u5b58\u5728\u3002

const\u5e38\u91cf\u5b58\u5728\u4e8e\u7a0b\u5e8f\u7684\u6570\u636e\u6bb5.

#define\u5e38\u91cf\u5b58\u5728\u4e8e\u7a0b\u5e8f\u7684\u4ee3\u7801\u6bb5\u3002

2\u4f18\u7f3a\u70b9:

\u81f3\u4e8e\u4e24\u8005\u7684\u4f18\u7f3a\u70b9\uff0c\u8981\u770b\u5177\u4f53\u7684\u60c5\u51b5\u4e86\u3002\u4e00\u822c\u7684\u5e38\u6570\u5e94\u7528\uff0c\u6211\u4e2a\u4eba\u8ba4\u4e3a#define\u662f\u4e00\u4e2a\u66f4\u597d\u7684\u9009\u62e9\uff1a

i.\u4ecerun-time\u7684\u89d2\u5ea6\u6765\u770b\uff0c\u4ed6\u5728\u7a7a\u95f4\u4e0a\u548c\u65f6\u95f4\u4e0a\u90fd\u6709\u5f88\u597d\u4f18\u52bf\u3002

ii.\u4ececompile-time\u7684\u89d2\u5ea6\u6765\u770b\uff0c\u7c7b\u4f3cm=t*10\u7684\u4ee3\u7801\u4e0d\u4f1a\u88ab\u7f16\u8bd1\u5668\u4f18\u5316\uff0ct*10\u7684\u64cd\u4f5c\u9700\u8981\u5728run-time\u6267\u884c\u3002\u800c#define\u7684\u5e38\u91cf\u4f1a\u88ab\u5408\u5e76\u3002

\u4f46\u662f\uff1a\u5982\u679c\u4f60\u9700\u8981\u7c97\u9c81\u7684\u4fee\u6539\u5e38\u6570\u7684\u503c\uff0c\u90a3\u5c31\u7684\u4f7f\u7528const\u4e86\uff0c\u56e0\u4e3a\u540e\u8005\u5728\u7a0b\u5e8f\u4e2d\u6ca1\u6709\u5b9e\u9645\u7684\u5b58\u5728.

\u53e6\u5916\u5728\u5934\u6587\u4ef6\u4e2d\u4f7f\u7528 #define \u53ef\u4ee5\u907f\u514d\u5934\u6587\u4ef6\u91cd\u590d\u5305\u542b\u7684\u95ee\u9898\uff0c\u8fd9\u4e2a\u529f\u80fd\uff0c\u662fconst\u65e0\u6cd5\u53d6\u4ee3\u7684\u3002

const\u6709\u7c7b\u578b\u68c0\u9a8c\uff0c\u4e0d\u8fc7\u53ea\u80fd\u5b9a\u4e49\u5e38\u91cf\uff0c\u4e0d\u80fd\u66ff\u4ee3define
define\u53ea\u662f\u5b8f\u66ff\u6362\uff0c\u6ca1\u6709\u7c7b\u578b\u68c0\u9a8c\uff0c\u6709\u53ef\u80fd\u4ea7\u751f\u610f\u5916\uff0c\u5bf9\u4e8e\u5b9a\u4e8e\u5e38\u91cf\u5efa\u8bae\u7528const\u3002\u4e0d\u8fc7\u5bf9\u7279\u5b9a\u95ee\u9898\u4e2ddefine\u529f\u80fd\u5f3a\u5927

define宏定义和const常变量区别:
1.define是宏定义,程序在预处理阶段将用define定义的内容进行了替换。因此程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。const定义的常量,在程序运行时在常量表中,系统为它分配内存。
2.define定义的常量,预处理时只是直接进行了替换。所以编译时不能进行数据类型检验。const定义的常量,在编译时进行严格的类型检验,可以避免出错。
3.define定义表达式时要注意“边缘效应”,例如如下定义:
#define N 2+3 //我们预想的N值是5,我们这样使用N,int a = N/2; //我们预想的a的值是2,可实际上a的值是3。原因在于在预处理阶段,编译器将 a = N/2处理成了 a = 2+3/2;这就是宏定义的字符串替换的“边缘效应”因此要如下定义:#define N (2+3)。const定义的表达式则没有上述问题。const定义的常量叫做常变量原因有二:const定义常量像变量一样检查类型;const可以在任何地方定义常量,编译器对它的处理过程与变量相似,只是分配内存的地方不同。

  • 璁ㄨ: 浣跨敤瀹瀹氫箟鍦嗗懆鐜涓巆onst 甯搁噺 瀹氫箟鍦嗗懆鐜鏈変粈涔堝尯鍒?
    绛旓細瀹炵敤璧锋潵宸埆涓嶅ぇ锛屼絾姒傚康涓婃槸瀹屽叏涓嶅悓鐨勩瀹瀹氫箟鏄枃鏈瓧绗︽浛鎹紝鍦ㄩ缂栬瘧闃舵瀹屾垚鏇挎崲锛屽洜姝ゅ湪C缂栬瘧鏃舵簮绋嬪簭閲屾湁浜嗗緢澶3.14杩欐牱鐨勬枃瀛楋紝缂栬瘧鏃跺湪鐩爣鐮佷腑鍖呭惈寰堝鐨勪釜甯告暟锛堜笉浼氳涓哄畠浠槸鍚屼竴涓)銆const鏄疌璇█鏈韩鐨勪笢瑗匡紝pi鍦ㄦ暣涓▼搴忎腑閮芥槸鍚屼竴涓噺锛堝间笉鑳藉彉)锛屽彧瀛樺偍浜嗕竴涓笺
  • define鍜const鐨勫尯鍒
    绛旓細const鐢ㄤ簬瀹氫箟甯搁噺锛涜宒efine鐢ㄤ簬瀹氫箟瀹忥紝鑰屽畯涔熷彲浠ョ敤浜庡畾涔夊父閲忋傞兘鐢ㄤ簬甯搁噺瀹氫箟鏃讹紝瀹冧滑鐨勫尯鍒鏈夛細const鐢熸晥浜庣紪璇戠殑闃舵锛沝efine鐢熸晥浜庨澶勭悊闃舵銆傞澶勭悊鍦ㄧ紪璇戜箣鍓嶏紝棰勫鐞嗗櫒灏嗘簮浠g爜涓殑瀹忕粺涓鏇挎崲涓烘寚瀹氱殑瀛楃銆備粠璇箟涓婅锛宑onst鏄0鏄庝竴涓笉鍙慨鏀圭殑鏁版嵁锛岃宒efine鍒欐槸鍦ㄥ婧愪唬鐮佽繘琛屾浛鎹俢onst...
  • c璇█涓const 鏄粈涔堟剰鎬,鎬庝箞鐢,浠涔堟椂鍊欑敤?
    绛旓細const 琛ㄧず甯搁噺锛岀浉褰撲簬瀹忓畾涔夛紝鍙兘璇诲彇锛屼笉鑳戒慨鏀广傚父鍙橀噺锛歝onst 鏁版嵁绫诲瀷 绗﹀彿甯稿彉閲 = 鏁板 濡傦細const float PI=3.14;鎸囬拡甯搁噺锛氭暟鎹被鍨 *const 鎸囬拡鍙橀噺=鍙橀噺鍚 濡傦細char *const p="abc";const淇グ鐨勬槸鎸囬拡鍙橀噺锛岃屼笉鏄寚閽堢殑鍊硷紝鎵浠ユ寚閽堟寚鍚戠殑鍊兼槸鍙互淇敼鐨勩傚父鎸囬拡锛歝onst 鏁版嵁绫诲瀷 *...
  • const 姣#define鏈変粈涔浼樼偣
    绛旓細const浣滅敤锛氬畾涔夊父閲忋佷慨楗板嚱鏁板弬鏁般佷慨楗板嚱鏁拌繑鍥炲间笁涓綔鐢ㄣ傝Const淇グ鐨勪笢瑗块兘鍙楀埌寮哄埗淇濇姢锛屽彲浠ラ闃叉剰澶栫殑鍙樺姩锛岃兘鎻愰珮绋嬪簭鐨勫仴澹с1锛const甯搁噺鏈夋暟鎹被鍨嬶紝鑰瀹忓父閲娌℃湁鏁版嵁绫诲瀷銆傜紪璇戝櫒鍙互瀵瑰墠鑰呰繘琛岀被鍨嬪畨鍏ㄦ鏌ャ傝屽#define鍙繘琛屽瓧绗︽浛鎹紝娌℃湁绫诲瀷瀹夊叏妫鏌ワ紝骞朵笖鍦ㄥ瓧绗︽浛鎹㈠彲鑳戒細浜х敓鎰忔枡涓嶅埌...
  • const define鐨勮В閲,涓嶅ぇ鎳
    绛旓細1锛氱紪璇戞湡闂达紝棰勫鐞嗛樁娈 2锛氭湪鏈夋暟鎹被鍨嬶紝鍙槸瀛楃涓叉浛鎹紝涓嶈繃鍦ㄦ浛鎹箣鍚庡憡璇夌紪璇戝櫒杩欐槸浠涔堢被鍨嬨
  • C璇█涓懡鍚甯搁噺涓绗﹀彿甯搁噺鐨勫尯鍒
    绛旓細鐢╠efine瀹鍙〃绀轰唬鐮佷唬鎹紝鍦ㄩ缂栬瘧鐨勬椂鍊欓亣鍒癲efine鐨勬椂鍊欎細鎶婂畠杞崲鎴愮浉搴旂殑鍊硷紝鐒跺悗鍐嶆眹缂栧埌鎸囦护涓幓锛屾墍浠ョ敤瀹忎竴鑸細鎶婃渶鍚庡鐞嗗緱鍒扮殑鍊间細鍐欏叆鎸囦护锛岀敤绔嬪嵆鏁板鍧鐨勬柟寮忓湪鎸囦护绌洪棿閲岄潰 杩欐槸瀹冧滑鏈川涓鐨勫尯鍒锛岃繕鏈夊氨鏄叾浠栫▼搴忚璁块棶杩欎釜甯搁噺锛const甯搁噺瑕佺敤extern澹版槑锛岃〃绀鸿繖涓父閲忔槸鍏朵粬鏁版嵁绌洪棿鐨勶紝...
  • define鐨勭敤娉
    绛旓細define鐨勭敤娉曞涓嬩笁绉嶏細1銆佺涓绉嶆槸瀹氫箟鏍囪瘑锛屾爣璇嗘湁鏁堣寖鍥翠负鏁翠釜绋嬪簭锛屽舰濡俤efine锛屽父涓巌f閰嶅悎浣跨敤銆2銆佺浜岀鏄畾涔夊父鏁帮紝濡#define max 100锛屽垯max浠h〃100锛岃繖绉嶆儏鍐典笅浣跨敤const瀹氫箟甯告暟鏇村ソ锛屽洜涓猴細const甯搁噺鏈夋暟鎹被鍨嬶紝鑰瀹忓父閲娌℃湁鏁版嵁绫诲瀷銆傜紪璇戝櫒鍙互瀵瑰墠鑰呰繘琛岀被鍨嬪畨鍏ㄦ鏌ワ紝鑰屽鍚庤呭彧杩涜瀛楃...
  • 甯搁噺涓庡彉閲忕殑鍖哄埆
    绛旓細甯搁噺鍖哄垎涓涓嶅悓鐨勭被鍨嬶紝濡25銆0銆-8涓烘暣褰㈠父閲忥紝6.8銆-7.89涓哄疄鍨嬪父閲忥紝鈥榓鈥欌榖鈥欎负瀛楃甯搁噺銆傚父閲忎竴鑸粠鍏跺瓧闈㈠舰寮忓嵆鍙垽鏂傝繖绉嶅父閲忕О涓哄瓧闈㈠父閲忔垨鐩存帴甯搁噺銆鍙橀噺鏉ユ簮浜庢暟瀛︼紝鏄绠楁満璇█涓兘鍌ㄥ瓨璁$畻缁撴灉鎴栬兘琛ㄧず鍊兼娊璞℃蹇点傚彉閲忓彲浠ラ氳繃鍙橀噺鍚嶈闂傚湪鎸囦护寮忚瑷涓紝鍙橀噺閫氬父鏄彲鍙樼殑锛涗絾鍦...
  • 瀛楅潰閲忋甯搁噺銆鍜屽彉閲忔湁浠涔堝尯鍒?
    绛旓細甯搁噺鍖哄垎涓涓嶅悓鐨勭被鍨嬶紝濡25銆0銆-8涓烘暣褰㈠父閲忥紝6.8銆-7.89涓哄疄鍨嬪父閲忥紝鈥榓鈥欌榖鈥欎负瀛楃甯搁噺銆傚父閲忎竴鑸粠鍏跺瓧闈㈠舰寮忓嵆鍙垽鏂傝繖绉嶅父閲忕О涓哄瓧闈㈠父閲忔垨鐩存帴甯搁噺銆3锛鍙橀噺鏉ユ簮浜庢暟瀛︼紝鏄绠楁満璇█涓兘鍌ㄥ瓨璁$畻缁撴灉鎴栬兘琛ㄧず鍊兼娊璞℃蹇点傚彉閲忓彲浠ラ氳繃鍙橀噺鍚嶈闂傚湪鎸囦护寮忚瑷涓紝鍙橀噺閫氬父鏄彲鍙樼殑锛...
  • CONST鐨勫彉閲忎笌甯搁噺
    绛旓細渚嬶細涓轰粈涔堜笅闈㈢殑渚嬪瓙鍦ㄤ娇鐢ㄤ竴涓const鍙橀噺鏉ュ垵濮嬪寲鏁扮粍锛孉NSI C鐨勭紪璇戝櫒浼氭姤鍛婁竴涓敊璇憿锛焎onst int n = 5;int a[n];绛旀涓庡垎鏋愶細1锛夎繖涓棶棰樿璁虹殑鏄甯搁噺鈥濅笌鈥滃彧璇诲彉閲忊鐨勫尯鍒銆傚父閲忥紝渚嬪5锛 abc锛岀瓑锛岃偗瀹氭槸鍙鐨勶紝鍥犱负甯搁噺鏄缂栬瘧鍣ㄦ斁鍦ㄥ唴瀛樹腑鐨勫彧璇诲尯鍩燂紝褰撶劧涔熷氨涓嶈兘澶熷幓淇敼瀹冦傝...
  • 扩展阅读:宏变量代码一览表 ... 法兰克宏变量#5201 ... 常量的关键字是const ... const char 和char 的区别 ... const变量必须初始化 ... const变量可以修改吗 ... 怎么定义一个const常量 ... const修饰的常变量 ... 宏定义和const常量的区别 ...

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