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,适用于给予只能对某个对象进行查询的权限,但是无修改权限。

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

 #define _CRT_SURE_NO_WARNINGS

 #include <stdio.h>
#include <stdlib.h> //const int *p;//指向常量的指针,与下面一样
//
//int const *p1;//指向常量的指针,与上面一样
//
//int * const p2;//常量指针
//
//const int * const p3;//指向常量的常量指针,与下面一样
//
//int const * const p4;//指向常量的常量指针,与上面一样 main1()//指向常量的指针,与下面一样,适用于给予只读权限,无修改权限,如:只有查询权限
{
int num = ;
num = ; const int data = ;//const只有初始化的时候可以赋值
//data = 998; /*严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2166 左值指定 const 对象 hello F : \users\denggelin\documents\visual studio 2015\Projects\hello\hello\main.c 24*/ //const int data1;
//data1 = 998;
/*严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2166 左值指定 const 对象 hello F : \users\denggelin\documents\visual studio 2015\Projects\hello\hello\main.c 28*/ system("pause");
} main2()////指向常量的指针,与上面一样,适用于给予只读权限,无修改权限,如:只有查询权限
{
int num = ;
int const *p = &num;
//*p = 3;
} main3()//常量指针,适用于只对某对象进行修改,如:对自己的银行账户存款取款
{
int num = ;
int data = ; printf("%d\n", num); int * const p = &num;
//p = &data;
*p = ; printf("%d\n", num); system("pause");
} main()//指向常量的常量指针
{
int num = ;
int data = ; const int * const p = &num;
//p = &data;
//严重性 代码 说明 项目 文件 行 禁止显示状态
// 错误 C2166 左值指定 const 对象 hello F : \users\denggelin\documents\visual studio 2015\Projects\hello\hello\main.c 64 //*p = 998;
/*严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2166 左值指定 const 对象 hello F : \users\denggelin\documents\visual studio 2015\Projects\hello\hello\main.c 68*/
}

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

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

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

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

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

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

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

 #define _CRT_SECURE_NO_WARNINGS

 #include <stdio.h>
#include <stdlib.h> main()
{
const int num = ; printf("%d\n", num); const int *p = &num;//指向常量的指针,定义一个指针指向一个常量,存储num的地址 int *pv = (int *)p;//对指向常量的指针进行强制转换 *pv = ;//对指针指向内容进行赋值 printf("%d\n", num);//间接的改变了一个常量 system("pause");
}

C_const的更多相关文章

  1. Autoconf 中文手册

    Autoconf Autoconf Creating Automatic Configuration Scripts Edition 2.13, for Autoconf version 2.13 D ...

随机推荐

  1. Inno Setup设定只运行一个安装包

    原文 http://zwkufo.blog.163.com/blog/static/25882512010292526944/?suggestedreading&wumii 在安装包中,经常会 ...

  2. EPiServer 简单项目总结

    国内用到的EPiServer应该不多,所以记录点用到过的东西,以便分享 1.EPiServer office site http://www.episerver.com/ 2.EPiServer CM ...

  3. apache httpd, nginx, tomcat, jboss

    web上的server都叫web server,但是大家分工也有不同的. nginx常用做静态内容服务和代理服务器(不是你FQ那个代理),直面外来请求转发给后面的应用服务(tomcat,django什 ...

  4. linux之SQL语句简明教程---函数

    既然数据库中有许多资料都是已数字的型态存在,一个很重要的用途就是要能够对这些数字做一些运算,例如将它们总合起来,或是找出它们的平均值.SQL 有提供一些这一类的函数.它们是: AVG (平均) COU ...

  5. oracle error info

    1,oracle jdbc HTTP Status 500 - Incorrect result size: expected 1, actual 0 2015-03-31 00:03:58,250 ...

  6. linux修改系统时间date命令加clock -w

    http://m.jb51.net/LINUXjishu/117784.html 修改linux系统时间的方法(date命令) 11-18 23:22:27作者:脚本之家 命令格式为: date -s ...

  7. TagBuilder 性能如此低下?

    本文来自:http://www.cnblogs.com/zhuisha/archive/2010/03/12/1684022.html 需要通过ASP.NET MVC生成一个列表,MVC里面根正苗红的 ...

  8. C#基础:事件(一) 【转】

    前面简要介绍了委托的基本知识,包括委托的概念.匿名方法.Lambda表达式等,现在讲讲与委托相关的另一个概念:事件. 事件由委托定义,因为事件的触发方(或者说发布方)并不知道事件的订阅方会用什么样的函 ...

  9. OpenCms创建站点过程图解——献给OpenCms的刚開始学习的人们

    非常多人都听说了OpenCms,知道了它的强大,索性的下载安装了,最终见到了久违OpenCms,看到了它简洁的界面,欣喜过后却不免一脸茫然,这个东西怎么用,我怎么用它来建站,从哪開始,无从下手,找资料 ...

  10. ajax封装

    /** * ITCAST WEB * Created by zhousg on 2016/5/24. */ /* * 1. 请求的类型 type get post * 2. 请求地址 url * 3. ...