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,适用于给予只能对某个对象进行查询的权限,但是无修改权限。
如:客户对自己的账户进行查询操作。
#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 = #
//*p = 3;
} main3()//常量指针,适用于只对某对象进行修改,如:对自己的银行账户存款取款
{
int num = ;
int data = ; printf("%d\n", num); int * const p = #
//p = &data;
*p = ; printf("%d\n", num); system("pause");
} main()//指向常量的常量指针
{
int num = ;
int data = ; const int * const p = #
//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的地址 int *pv = (int *)p;//对指向常量的指针进行强制转换 *pv = ;//对指针指向内容进行赋值 printf("%d\n", num);//间接的改变了一个常量 system("pause");
}
C_const的更多相关文章
- Autoconf 中文手册
Autoconf Autoconf Creating Automatic Configuration Scripts Edition 2.13, for Autoconf version 2.13 D ...
随机推荐
- centos vim的安装目录在哪里
[root@test man]# rpm -ql vim-common | grep python/usr/share/vim/vim72/autoload/pythoncomplete.vim/us ...
- NEC红外遥控协议理解与实现
红外发射管有2个管脚,发送的是经过38KHz时钟调制过的信号.例如下图使用PWM产生一个等占空时钟信号用于调制. 接收管收下来的信号已经经过了解调,可以直接连接系统的外部中断脚. 下面通过逻辑分析仪来 ...
- 【MYSQL 清空所有的的表中的数据的SQL的生成】
MYSQL 清空所有的的表中的数据的SQL的生成 select Concat('TRUNCATE TABLE ', TABLE_NAME, ';') from INFORMATION_SCHEMA.T ...
- mysql 匹配update
update 语句示例: UPDATE `zjzc`.`QRTZ_SCHEDuler_state` SET `ip`='220.191.34.246' WHERE `sn`='3117764' and ...
- 77个常用Linux命令和工具
77个常用Linux命令和工具 Linux管理员不能单靠GUI图形界面吃饭.这就是我们编辑这篇最实用Linux命令手册的原因.这个指南是特别为Linux管理员和系统管理员 设计的,汇集了最有用的一些工 ...
- linux之SQL语句简明教程---LIKE
LIKE 是另一个在 WHERE 子句中会用到的指令.基本上,LIKE 能让我们依据一个套式 (pattern) 来找出我们要的资料.相对来说,在运用 IN 的时候,我们完全地知道我们需要的条件:在运 ...
- Atom编辑器快捷键大全
文件切换 ctrl-shift-s 保存所有打开的文件cmd-shift-o 打开目录cmd-\ 显示或隐藏目录树ctrl-0 焦点移到目录树目录树下,使用a,m,delete来增加,修改和删除cmd ...
- UML视图(四)状态图
以下是一个图书馆管理系统的状态图,非常典型,涵盖状态图的全部元素的使用,由于状态图相对照较简单,直接从看图就能非常好地掌握.假设想对状态图的元素严谨的概念进行了解,在图下方,有仔细的叙述. 看了上面的 ...
- 自己动手写CPU之第五阶段(1)——流水线数据相关问题
将陆续上传本人写的新书<自己动手写CPU>(尚未出版),今天是第15篇,我尽量每周四篇 上一章建立了原始的OpenMIPS五级流水线结构,可是仅仅实现了一条ori指令,从本章開始,将逐步完 ...
- JS实现用键盘控制DIV上下左右+放大缩小与变色
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...