• C_const


    const *

    const在*左边,指向一个常量。

    * const

    const在*右边,指针是常量。

    1 const int *p;//指向常量的指针,与下面一样

    2 int const *p1;//指向常量的指针,与上面一样

    1和2,适用于给予查询所有的权限,但是无修改权限。

    如:超级管理员,查询所有账户的权限,但是无修改权限。

    3 int * const p2;//常量指针

    3,适用于给予只能对某个对象修改的权限。

    如:客户对自己的账号进行存款、取款操作。

    4 const int * const p3;//指向常量的常量指针,与下面一样

    5 int const * const p4;//指向常量的常量指针,与上面一样

    4和5,适用于给予只能对某个对象进行查询的权限,但是无修改权限。

    如:客户对自己的账户进行查询操作。

     1 #define _CRT_SURE_NO_WARNINGS
     2 
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 
     6 //const int *p;//指向常量的指针,与下面一样
     7 //
     8 //int const *p1;//指向常量的指针,与上面一样
     9 //
    10 //int * const p2;//常量指针
    11 //
    12 //const int * const p3;//指向常量的常量指针,与下面一样
    13 //
    14 //int const * const p4;//指向常量的常量指针,与上面一样
    15 
    16 main1()//指向常量的指针,与下面一样,适用于给予只读权限,无修改权限,如:只有查询权限
    17 {
    18     int num = 10;
    19     num = 3;
    20 
    21     const int data = 20;//const只有初始化的时候可以赋值
    22     //data = 998;
    23 
    24     /*严重性    代码    说明    项目    文件    行    禁止显示状态
    25     错误    C2166    左值指定 const 对象    hello    F : usersdenggelindocumentsvisual studio 2015Projectshellohellomain.c    24*/
    26 
    27     //const int data1;
    28     //data1 = 998;
    29     /*严重性    代码    说明    项目    文件    行    禁止显示状态
    30         错误    C2166    左值指定 const 对象    hello    F : usersdenggelindocumentsvisual studio 2015Projectshellohellomain.c    28*/
    31 
    32     system("pause");
    33 }
    34 
    35 main2()////指向常量的指针,与上面一样,适用于给予只读权限,无修改权限,如:只有查询权限
    36 {
    37     int num = 10;
    38     int const *p = &num;
    39     //*p = 3;
    40 }
    41 
    42 main3()//常量指针,适用于只对某对象进行修改,如:对自己的银行账户存款取款
    43 {
    44     int num = 10;
    45     int data = 20;
    46 
    47     printf("%d
    ", num);
    48 
    49     int * const p = &num;
    50     //p = &data;
    51     *p = 998;
    52         
    53     printf("%d
    ", num);
    54 
    55     system("pause");
    56 }
    57 
    58 main()//指向常量的常量指针
    59 {
    60     int num = 10;
    61     int data = 20;
    62 
    63     const int * const p = &num;
    64     //p = &data;
    65     //严重性    代码    说明    项目    文件    行    禁止显示状态
    66     //    错误    C2166    左值指定 const 对象    hello    F : usersdenggelindocumentsvisual studio 2015Projectshellohellomain.c    64
    67 
    68     //*p = 998;
    69     /*严重性    代码    说明    项目    文件    行    禁止显示状态
    70         错误    C2166    左值指定 const 对象    hello    F : usersdenggelindocumentsvisual studio 2015Projectshellohellomain.c    68*/
    71 }

    const变量,可以通过指针修改

    const的本质是伪常量,无法用于数组初始化,以及全局变量初始化。

    原因:const仅仅限定变量一旦初始化后无法再直接赋值。

    const只是限定一个变量无法直接赋值,但是可以间接赋值。

    但是还是有可能被意外修改,例如间接赋值,并不是完全只读,所以并非真正意义的常量。

    例如局部const变量在栈区,而不在静态区(静态区会一直存在)。

    也不在代码区,因为代码区会禁止修改,代码区间接赋值不可能成功。

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 
     6 main()
     7 {
     8     const int num = 10;
     9 
    10     printf("%d
    ", num);
    11 
    12     const int *p = &num;//指向常量的指针,定义一个指针指向一个常量,存储num的地址
    13 
    14     int *pv = (int *)p;//对指向常量的指针进行强制转换
    15 
    16     *pv = 8;//对指针指向内容进行赋值
    17 
    18     printf("%d
    ", num);//间接的改变了一个常量
    19 
    20     system("pause");
    21 }
  • 相关阅读:
    如何分析损益表
    如何修改windows 2008(R2)的远程桌面连接数
    08年Gartner商务智能平台魔法四分区
    浅谈BI项目——为失败BI项目解惑(转IT168)
    商业智能项目错误经验总结(三) 需求调研
    asp.net学习笔记·Cookie
    C#安全调用线程的步骤
    一般处理程序学习初步——最简单的一般处理程序
    asp.net学习笔记·get与post区别
    C#中使用DES和AES加密解密
  • 原文地址:https://www.cnblogs.com/denggelin/p/5548247.html
Copyright © 2020-2023  润新知