zoukankan      html  css  js  c++  java
  • const define static extern 关键词详解

    const

    const关键词并不能把一个变量变成一个常量, 在符号前加上const表示这个符号不能被赋值, 即他的值对这个符号来说是只读的, 但并不代表这个值不能用其他方法去改变. 通过下面的例子就能比较好理解,

    int i = 5;
    const int *a = &i;
    *a = 8;   //报错, 只读不能赋值
    i = 10;   //ok

    平常我们见得多的const用法有如下几种,似乎可以总结为“就近原则”:即const最靠近其右边哪个变量,就说明那个变量为常量。”

    const int *p1; /* p1所指向的int变量值不可改变,为常量,但可以改变p1指针的值 */   //如果const在*左边,则指针指向的变量的数值不可变
    int * const p2; /* p2指针为常量,即p2的值不可改变,但可以改变p2指向对象的值 */     .//如果const在*右边,则指针指向的地址的数值不可变
    const int * const p3; /* p3指针是常量,同时p3所指向int对象的值也是常量 */

            //const
        
    //    如何判断const修饰的是哪一部分的内容?
    //    int const *p = &a;
    //    1.去掉基本数据类型(如int)
    //    const *p = &a;
    //    2. 从const开始往后找,即为不能修改的量
    //    *p
    //    3. 如果不知道*p代指的什么内容,把等式写出来
    //    *p = ?
    //    此时,const修饰的就是指针p指向的内容不能做修改
    //     int a = 10;
    //    const int * const p = &a;//*p = ? p = ?
    //    int * const p = &a;  //  p = ?
    //    int const *p = &a;   //  *p = ? 
    //    const int *p = &a;   //  *p = ?

     

    作用

          1)增强程序安全性(防修改)

          2)比如strcpy、strlen、memcpy等

    define

      //    宏定义格式
      //    #define 宏名字 表达式
      //    宏名字一般都要大写
        
            //宏的作用
            //1.定义一些比较常用的量
            //2.定义一些比较常用的操作
            //宏如何工作?
            //宏在预编译期间被替换的

           1)在C语言里,宏主要的功能是做替换

            2)宏的使用能让程序更加易于修改

            3)宏分为:

            3.1)无参宏

            3.1.1)#define MAX 99

            3.1.2)例如:

            3.1.3)int i=MAX;

            3.1.4)恒等于

            3.1.5)int i=99;

            3.1.6)MAX称为宏名。凡是使用99的地方都能使用MAX替代

            3.2)带参宏

            3.2.1)#define kMaxValue(A,B)(A>B?A:B)

            3.2.2)使用:

            3.2.3)int a=kMaxValue(3,5);

            3.2.4)a=?

           

           4)预编译时进行替换

           5)宏名命名规则:

                纯大写  或者

                K+驼峰

           6)例如 MAX 或者kMax

           7)宏不是变量

    static


          1)static用于修饰变量

          2)被static修饰的变量存储在静态区

          3)如果不赋值,默认为0

          4)在main之前就初始化,只能初始化一次,但是能多次赋值

          5)static int a=10;//a存放在全局区

          6)static int b[10]={0};//整个数组存放在全局区

          7)static int*p=NULL;//指针存放在全局区

          8)...全局区的变量在程序结束时才释放

     
     
  • 相关阅读:
    读书笔记_Effective_C++_条款十:令operator=返回一个reference to *this
    读书笔记_Effective_C++_条款九:绝不在构造和析构函数中调用virtual函数
    读书笔记_Effective_C++_条款七:为多态基类声明virtual析构函数
    读书笔记_Effective_C++_条款十二:复制对象时勿忘其每一个成分
    读书笔记_Effective_C++_条款八:别让异常逃离析构函数
    创建django project及app中的若干问题
    python一些小知识
    python小专题——JSON
    python小专题——optparse模块
    初窥JQuery(一)选择符 【转】
  • 原文地址:https://www.cnblogs.com/tian-sun/p/4308399.html
Copyright © 2011-2022 走看看