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 ...
随机推荐
- 再次优化NGINX+php-fpm上传
上次写了一篇nginx+php-fpm优化上传,一位博友留言介绍了,第三方nginx upload module http://www.grid.net.ru/nginx/upload.en.html ...
- Sql Server专题一:索引(中)
写在前面的废话: 索引这个知识点,我前前后后不知道看了多少边,网上的文章五花八门,搞的我晕头转向,搞的牛逼点的就是测试索引带来的好处,还搞一大堆的测试数据出来,有意思吗?MS自己不会测试吗?这样的测试 ...
- 实现Linux下的U盘(USB Mass Storage)驱动
如何实现Linux下的U盘(USB Mass Storage)驱动 版本:v0.7 How to Write Linux USB MSC (Mass Storage Class) Driver Cri ...
- 使用StoryBoard设置Scrollview的横向滚动不用一行代码
1).创建一个空工程Single类型的工程,然后打开故事版(StoryBoard)在ViewController上添加scrollview 2).然后对scrollview添加约束,上下左右全部都是0 ...
- 【Android Training UI】创建自定义Views(Lesson 2 - 自定义Drawing)
发布在我的网站:http://kesenhoo.github.io/blog/2013/06/30/android-training-ui-creating-custom-views-lesson-2 ...
- grep 和 sed:linux经常使用工具 & 基本正則表達式
grep 见链接:http://www.cyberciti.biz/faq/grep-regular-expressions/ sed參考文章:http://www.thegeekstuff.com ...
- 很好很实用的.net、网站系统后台模板
本模板是程序园给大家提供的应用系统开发后台模板,主要使用div+css布局实现,菜单使用了ddaccordion.js菜单控件. 转载请标明:http://www.kwstu.com/ArticleV ...
- iOS开发-使用Storyboard进行界面跳转及传值
前言:苹果官方是推荐我们将所有的UI都使用Storyboard去搭建,Storyboard也是一个很成熟的工具了.使用Storyboard 去搭建所有界面,我们可以很迅捷地搭建出复杂的界面,也就是说能 ...
- 06JS高级创建对象使用原型共享对象方法
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- 字符串聚合技术(String Aggregation Techniques)
from: http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php String Aggregation ...