C语言中的const

大家几乎都能知道,关键字const是用于定义常量,如果一个常量被const修饰了,那么它就不能被修改了。也有人可能会想,不是有#define为啥非要用const。的确!在一定场景下宏可以实现const相近的作用,但是const和宏相比还是有很大区别的:

1、预编译指令只是对值进行简单的替换,不能进行类型检查

2、可以保护被修饰的东西,防止意外修改,增强程序的健壮性

3、编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

const的几种常用方法

int  main(int argc, char const *argv[])
{
    
    /*
     const int a;  /
     int const a; 有一样的意思
     如果我们给出 const int  a;你应该知道这是将a常量化了,但是为什么那?
     那是因为int 和const 都作为一个类型限定词,有相同的地位。
     所以你也可以写成 int const a;似乎这样更加好理解!当然这都不难,
     难点在哪里哪?当然此时你如果定义指针也是可以修改的,但是会报警告!
     当然强制类型转换后警告也不会报了!
     所以  const int a=10; 是申明了一个只可读的变量,如果 a=12;在编译期报错。
     */
    
    /*1、申明一个常变量*/
    const int a=10;
    /* a =12;  变异错误,a是编译期常量 */
    
    
    int b=10,c=55;
    
    /*2、  申明一个指针, 该指针指向的变量不可更改 ,相当于通过*p指针获得了原来实例的可读版本
     一般用于子函数调用中形参函数,限制子函数中不能对调用放内容进行更改
     如 const char* src; 或 char const *src;
     *p是常量。也就是说,p指向的数据是常量
     
     const int* p
     int const *P;
     const int* p; 这是修饰了谁那?其实我们可以这样想,如果我们把int 拿出来
     也就是 const int (*p); 等价于  int const (*p);
     由此我们可以看出来const修饰了*p啊!
     也就是指向的内容不可以改变,比如p已经指向a变量,但是*p=45;会报错,因为*p不可改变
     但是地址是可以改变的。比如c=55, p=&c;是正确的
     但是我们如果写为int const *p 似乎就非常好理解了。就是修饰了*p
     */
    const int* p=&a;
    /*  *p=45; 会报错 */
    p=&c;//正确做法
    //*p=445; 不可更改
    c=43534;//通过原来变量名可更改,相当于通过p指针获得了c变量的可读版本
    int const *ptr=&b;
    /*  *ptr=44; *ptr 是不可更改 */
    
    /* 3、 申明一个常指针变量 也就是说 该指针你只能赋值一次, 且只能在定义时候赋值 ;
     但是指针指向的变量可以改变
     int * const p;
     */
    int* const ptr2=&b;
    *ptr2=3454;
    fprintf(stdout, "%d\n", *ptr2 );
    
    /* 4、 const int *const p
     表示p指针是一个常指针变量,同时指向的变量也是常量不可更改
     */
    const int *const ptr3=&c;
    /* ptr3=&a;  错误,ptr3 是常指针变量, 只读的 */
    /* *ptr3=80; 错误,*ptr3 是常量不可更改,只读的 */
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容

  • (1)可以定义 const 常量 (2)const 可以修饰函数的参数、返回值. 详细内容: 1、什么是const...
    幽鬼09阅读 707评论 0 4
  • 注:这是第三遍读《C语言深度解剖》,想想好像自从大学开始就没读完过几本书,其中谭浩强的那本《C语言程序设计(第四版...
    HavenXie阅读 1,721评论 1 6
  • 这两天我总是不自觉的就会想到我自己的生日,然而我的生日还要好久好久才到。 最近看的两本书分别是《岛上书店》和《潜水...
    羊小彩阅读 293评论 0 0
  • 宝贝呀,如果哪天我走了 一切,都要你来扛。 我真的好心疼你 不该 把这几个人好好活着的重担交给你 我真切地希望:一...
    心素如简之人淡如菊阅读 130评论 0 0
  • 朋友小s周末约我出来见面,地点选在一家环境幽静的咖啡厅。我到了之后发觉她的情绪略有点低落,平时笑意盈盈的眼神这次没...
    浅草小仙阅读 2,302评论 3 0