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. PHP简单socket编程

    今天再看一点邮件发送的功能,所以了解一下socket变成,看到了一篇不错的文章,转发过来做个笔记吧. 原文链接:http://www.cnblogs.com/thinksasa/archive/201 ...

  2. 映射 SQL 和 Java 类型

    http://alex2009.blog.51cto.com/749524/272942 AJAX: http://www.w3school.com.cn/jquery/ajax_ajax.asp h ...

  3. MEMS陀螺仪(gyroscope)的工作原理

    传统的陀螺仪主要是利用角动量守恒原理,因此它主要是一个不停转动的物体,它的转轴指向不随承载它的支架的旋转而变化. 但是MEMS陀螺仪(gyroscope)的工作原理不是这样的,因为要用微机械技术在硅片 ...

  4. html5 web worker

    A web worker is a JavaScript running in the background, without affecting the performance of the pag ...

  5. zlog

    zlog源码包下载地址https://github.com/HardySimpson/zlog zlog使用手册http://blog.csdn.net/yangzhenzhen/article/de ...

  6. 每日一dp(2)——龟兔赛跑(hdu 2059)

    比較经典的动态规划的题目了 一般动态规划的想法都是先推断是否有最优子结构,无后效性.接着从状态转移入手,尽量细分状态(即给定N得到N+1),完了再递推计算 难点:转移方程,其一般也难在怎样描写叙述一个 ...

  7. JAVA程序猿面试题汇总

    (此话题将不断更新,请留意) 第一,谈谈final, finally, finalize的差别. final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承.finally是异常 ...

  8. Linux下多核环境Erlang的SMP測试

    目标 (1)       了解在多核cpu环境下,erlang并发进程调度对各个cpu核负载的影响: (2)       Erlang虚拟机的内存添加机理: (3)       Erlang进程的调度 ...

  9. 九度OJ 题目1371:最小的K个数

    题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 输入: 每个测试案例包括2行: 第一行为2个整数n,k(1< ...

  10. linux通过文件查找依赖关系

    通过文件查找安装包安装缺少libstdc++6这个文件在ls /usr/lib/libstd*下有两个文件/usr/lib/libstdc++.so.6 /usr/lib/libstdc++.so.6 ...