zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    dataTables分页实现两个前提
    centos 7 下 nginx 1.10.3 编译安装的方法
    redis 远程连接出错的解决办法
    Yii2事件驱动的运行机制
    Yii2项目高级模版 三个模块在同一个目录下的重定向配置
    PHP处理上传文件信息数组中的文件类型 正确获取
    PHP is_writeable 存在bug , 写一个自定函数 判断文件是否可写
    PHP面试题学习
    解决yii2 禁用layout时AppAsset不加载资源的问题
    如何在 Docker 容器中运行 Kali Linux 2.0
  • 原文地址:https://www.cnblogs.com/denggelin/p/5548247.html
Copyright © 2011-2022 走看看