zoukankan      html  css  js  c++  java
  • 关于Const指针的一点补充

    OsChina上一个朋友给出的例子,很能说明问题:

    typedef char * CharPtr;
        const CharPtr mycharptr = "Hello, World";
        mycharptr[0]='h'; //OK[1]
        mycharptr = "It's Wrong"; //Err[2]

          如果把CharPtr替代掉的话,那么似乎[1]是错的,[2]是对的,因为const char *是指向const char的指针,指针可以指向别的,但是指向的内容不能变。实际上,const只是编译器的一种规范,所以编译的时候只按照语法检查是不是改变了,char*被typedef之后,可以当成一种简单类型看,那么const CharPtr 就只一个CharPtr型的常量,对它的赋值肯定会引起编译错误,而[0]这种寻址并不影响。

          不过,如果把typedef 改为宏替换(如下),事情就不一样了,毕竟宏替换只是一种替换而已,不会引起编译器的检查,编译之前,CharPtr就已经被替换掉了。

    #define CharPtr char *
    const CharPtr mycharptr = "Hello, World";
        mycharptr[0]='h'; //Err
        mycharptr = "It's Wrong"; //OK
     
  • 相关阅读:
    CSS选择器
    CSS框模型
    AJAX
    HTML 表单
    二叉树
    词嵌入、word2vec
    双向、深层循环神经网络
    20201012----每天都在进步吗?
    20201012--环境搭建
    20201011--记录一下
  • 原文地址:https://www.cnblogs.com/sdqxcxh/p/2494164.html
Copyright © 2011-2022 走看看