设为首页 加入收藏

TOP

const关键字到底该怎么用(三)
2019-01-29 22:08:15 】 浏览:343
Tags:const 关键字 到底 怎么
nbsp; rbp
        mov     rbp, rsp
        sub     rsp, 16
        mov     DWORD PTR [rbp-4], 2019
        mov     eax, DWORD PTR [rbp-4]
        mov     esi, eax
        mov     edi, OFFSET FLAT:.LC0
        mov     eax, 0
        call    printf
        mov     eax, 0
        leave
        ret

我们发现,并没有任何差异!当然这一个例子并不能说明所有的问题。但是我们要知道的是,const关键字告诉了编译器,它修饰的变量不能被改变,如果代码中发现有类似改变该变量的操作,那么编译器就会捕捉这个错误。

那么它在实际中的意义之一是什么呢?帮助程序员提前发现问题,避免不该修改的值被意外地修改,但是无法完全保证不被修改!例如我们可以通过对指针进行强转:

#include<stdio.h>
void myPrint(const char *str);
void myPrint(const char *str)
{
    char *b = (char *)str;
    b[0] = 'H';
    printf("my print:%s\n",b);

}
int main(void)
{
    char str[] = "hello world";
    myPrint(str);
    return 0;
}

运行结果:

my print:Hello world

也就是说,const关键字是给编译器用的,帮助程序员提早发现可能存在的问题。
但是实际中永远不要写这样的代码!

总结

介绍了这么多,关键点如下:

  • const关键字让编译器帮助我们发现变量不该被修改却被意外修改的错误。
  • const关键字修饰的变量并非真正意义完完全全的只读。
  • 对于不该被修改的入参,应该用const修饰,这是const使用的常见姿势。
  • const修饰的变量只能正常赋值一次。
  • 不要试图将非const数据的地址赋给普通指针。
  • 不要忽略编译器的警告,除非你很清楚在做什么。
  • 虽然可以通过某种不正规途径修改const修饰的变量,但是永远不要这么做

思考

  • 与#define相比,const有什么优点?
  • const关键字到底该什么时候用?

微信公众号【编程珠玑】:专注但不限于分享计算机编程基础,Linux,C语言C++,算法,数据库等编程相关[原创]技术文章,号内包含大量经典电子书和视频学习资源。欢迎一起交流学习,一起修炼计算机“内功”,知其然,更知其所以然。

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c语言基础——基本数据类型 下一篇《The C Programming Language》..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目