zoukankan      html  css  js  c++  java
  • C语言const

    #include <stdio.h>
    int main()
    {
        /*************************************************************
         *  C语言之const
         *  看到const关键字,很多人想到的可能是const常量,其实关键字const并不能把变量变成常量!
         *  在一个符号前加上const限定符只是表示这个符号不能被赋值。也就是它的值对于这个符号来说是
         *  只读的,但它并不能防止通过程序的内部(甚至是外部)的方法来修改这个值(C专家编程.p21)。也
         *  就是说const变量是只读变量,既然是变量那么就可以取得其地址,然后修改其值。看来
         *  const也是防君子不防小人啊!:)
         *
         *  const 使用情况分类详析
         *
         *  1、const的普通用法
         *    const int n = 10;
         *  意思很明显,n是一个只读变量,程序不可以直接修改其值。这里还有一个问题需要注意,即如下使用:
         *  int a[n];在ANSI C中,这种写法是错误的,因为数组的大小应该是个常量,而n只是一个
         *  变量。
         *
         *  2、const用于指针
         *    const int *p;
         *    int const *p;
         *    int * const p;
         *  const int *p;等价于int const *p;
         *  在最后的一种情况下,指针是只读的(即p只读),而在另外两种情况下,指针所指向的对象是只读的
         *  (即*p只读)。const 是一个左结合的类型修饰符,它与其左侧的类型修饰符一起为一个类型修饰
         *  符,所以,int const 限定*p,不限定p。int *const 限定p,不限定*p。这里有一个
         *  简便的区分方法:  沿着*号划一条线,如果const位于*的左侧,则const就是用来修饰指针所
         *  指向的变量,即指针指向为常量;如果const位于*的右侧,const就是修饰指针本身,即指针
         *  本身是常量。
         *
         *  3、const用于函数的地址传递参数
         *    void foo(const int *p)
         *  这种形式通常用于在数组形式的参数中模拟传值调用。也就是相当于函数调用者声称:
         *  "我给你一个指向它的指针,但你不能去修改它。"如果函数编写者遵循了这个约定,
         *  那么就相当于模拟了值传递。这也是const最有用之处了:用来限定函数的形参,
         *  这样该函数将不会修改实参指针所指的数据。这里注意了,是函数不应该去修改而不
         *  是不能修改,也就是说const不能阻止参数的修改(原因见上)。
         *
         *  4、const用于限定函数的返回值
         *    const int foo();
         *    const struct mytype foo();
         *  上述写法限定函数的返回值不可被更新,当函数返回内部的类型时,已经是一个数值,当然不可被赋
         *  值更新,所以,此时const无意义,最好去掉,以免困惑。当函数返回自定义的类型时,这个类型
         *  仍然包含可以被赋值的变量成员,所以,此时有意义。
         *************************************************************/
         int const a = 10;//只读变量,也就是不能通过符号a对值进行修改
         int b = 30;
         int  *  const p = &a;//只读指针,也就是不能通过p对指针的值进行修改
         *p = 20;//通过只读指针修改只读变量的值
         int const *pc = &a;//指向只读变量的指针,
         const  int c = 40;
         pc = &c;
         pc = &b;
         printf("a = %d
    ", a);
    
         return 0;
    }
    a = 20
    
    
    
    
    
  • 相关阅读:
    【Q&A】pytorch中的worker如何工作的
    【教程】opencv-python+yolov3实现目标检测
    ubuntu使用scrcpy手机投屏-免费神器scrcpy【介绍、安装、使用】
    【从踩坑到教程】win10下ubuntu18.04双系统UEFI模式安装、Nvidia驱动安装
    Python引用与目录结构
    交流总结
    转载-趣图展现程序员职业生涯的11个阶段
    转载-在家工作,10招助你效率、生活两不误
    转载-新年寄望:从小做起,活在当下
    转载-成为明星程序员的10个提示
  • 原文地址:https://www.cnblogs.com/heml/p/3532051.html
Copyright © 2011-2022 走看看