1、const 的理解

const 是C语言的一个关键字,需要注意的是,const 关键字是把变量变为一个只读的变量(也就是不可以作为左值),绝对不是将这个变量变为常量。也就是说经过const 修饰的变量成为只读的变量之后,那么这个变量就只能作为右值(只能赋值给别人),绝对不能成为左值(不能接收别人的赋值)。

而 C++ 则是将 const 修饰的常量变为一个真正的常量(变量的内容不可以被修改), 这一点的区别需要进行注意。当 const 变量的时候,就将这个常量放在符号表里面,编译的过程中发现使用了变量,那么就从符号表里面的值进行替换。

 

经过const 修饰的变量,在定义的时候,就要进行初始化。

const int a = 10;  // 正确

const int a;  // 错误

 

const 关键字最有用的地方是用来限定函数的形参

func(const char *ptr)
{
}

这样 ,func 函数将不会修改实参指针所指的数据,但是其他的函数却可以修改他。

const 本质上被命名为 readonly 更为合适。

 

2、指向const的指针

    首先,是一个指针,但是这个指针是指向一个const 类型的指针。

    一般:

const int *p  // 一般使用这个

或者:

int const *p   
 第一种:首先 P 是一个指针,P所指向的内容(*P)所指向的内容是 const int 类型的。

第二种,: 首先 P 也是一个指针,指向的内容是 const int 类型的,也就是所指向的内容是是绝对不能被修改的。

    一句话, P 这个地址可以随便指,但是地址里面保存的值却是不能改变。

3、const 指针

    首先是一个指针,只不过这个指针是 const 类型的,也就是这个指针变量的地址,只能在初始化之后,就一直指向这个地址,地址所被保存的内容是可变的。

int * const p = 地址 // 因为P 所指向的地址是不能被修改的,所以必须被初始化

    首先,这个P 是一个指针,而这个指针是指向了 int 类型的 const 指针。只不过地址是被固定,不能改变,但是地址所保存的数值确实可变的,比如:

*p = 3;

 

4、指针和内容都是不可变的

    顾名思义,就是指针的地址和地址所被保存的内容都是不可变的。

const int * const p = 地址值
int const * const p = 地址值

    可见 P 是一个指针,但是这个指针,前面有 const 进行修饰,所以,这个 P 指针就是一个指针常量,所以 P 的地址就被固定了,所以只能进行初始化了。 而对于 *p 而言,前面又有 const 进行修饰,所以*p 就是一个常量了,也就是 p 指向地址,地址上保存的数据是一个常量,不能被改变的。

5、理解记忆

    其实就看 const 的位置。const,在指针的星号之前,那么就是指向const 的指针,也就是 *p 的内容是常量,不能被改变。

    const 在星号之后的话,那么 ,就是指向 const 的指针,也就是这个指针指向的地址,不能被改变的,所以,const 指针就必须进行初始化,然后这个地址就是一直被固定住了,不能内改变的。

6、const 与 define 区别

const 是由编译器进行处理,执行类型检查和作用域的检查;

define 是由预处理器进行处理,只做简单的文本替换工作而已。

const的理解、const指针、指向const的指针的更多相关文章

  1. C 指针常量 和常量指针 指向常量的指针常量的使用

    #include <stdio.h> /* 指针常量 和常量指针 指向常量的指针常量 */ int main() { int a = 100; int b =200; int* const ...

  2. 常量指针-指向常量的指针,指针常量-指针本身是常量,常量-不能更改值的常量,数组指针-是指针int (*p)[n] 指针数组-是数组int *p[n]

    1.常量指针 定义:具有只能够读取内存中数据,却不能够修改内存中数据的属性的指针,称为指向常量的指针,简称常量指针. 声明:const int * p; int const * p; 注:可以将一个常 ...

  3. 指针常量&常量指针&指向常量的指针常量

    搞不懂不吃晚饭 (1)指针常量 指针常量是一个常量,但是是指针修饰的. 格式:int * const p; 例如 int a, b; int * const p = &a;//指针常量 //分 ...

  4. const 指针与指向const的指针

    最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...

  5. const对象,指向const对象的指针 和 const 指针

    const对象: const对象声明时必须赋初值,该值在编译阶段确定,不可在程序中修改. const修饰符既可放在类型名前也可放在类型名后,通常放在类型名前.不过放在类型名后易于理解. const i ...

  6. const指针和指向const的指针

    int *const p=&a; 这是const指针,这种指针必须在定义时就给出它所指向的地址,否则会error:uninitialized const 'p'.const指针的指针本身是co ...

  7. 指针总结指向const的指针、const指针、指向const指针的const指针

    指针的一些总结   const与指针 指向const的指针指的是指针指向的数据是常量,不可以被修改,但指针变量本身可以被修改,如const int *p:严格说不能用指针间接修改指向的数据,但该变量可 ...

  8. Const指针 、 指向const的指针 、引用、指针

    1. const指针和 指向const的指针 指向const的指针: 不允许通过指针来改变其指向的const值 const double *cptr *cptr = 42;  // error! 指针 ...

  9. Spline样条函数 //C++关键字:operator // 重载函数 // 隐含的this指针 // 指针和const限定符

    在数学学科数值分析中,样条是一种特殊的函数,由多项式分段定义.样条插值是使用一种名为样条的特殊分段多项式进行插值的形式.由于样条插值可以使用低阶多项式样条实现较小的差值误差,这样就避免了使用高阶多项式 ...

  10. 指针和Const限定符

    指针和Const限定符 1.指向const对象的指针 如果指针指向的是const对象,则不允许使用指针来改变其所指的const值.C++要求指向const对象的指针具有const特性. const d ...

随机推荐

  1. 浅谈 easyui tabs 的href和content属性

    众所周知,jQuery Easyui 的tabs插件有两种方式加载某个tab(标签页)上的内容:“href远程请求”和“content本地内容”,本文就两种方式的优缺点进行简单分析和思考. 两者特点: ...

  2. 【一个比较bug free的二分写法】

    lower_bound: [l, r)区间内大于等于val的第一个位置 int lower_bound(int l, int r, int val){ while(l < r){ ); if(a ...

  3. 【转】 #define用法详解

    #define用法详解   1.#define 的作用 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”.被定义为“宏”的标识符称为“宏名”.在编译预处理时,对程序中所有出现的“宏 ...

  4. 开发人员为组件添加自定义的className

    在开发过程当中需要给组件写上自己的样式,这个时候怎么办呢? 直接给组件添加className这样是无效的 当给组件添加className之后 在写组件的时候需要对使用你的组件的开发人员提供自定义cla ...

  5. 洛谷 [P3623] 免费道路

    有 k 条特殊边的生成树 我们发现有一些边是必须的,如果把所有的水泥路都加入并查集,再枚举鹅卵石路,如果这条路能再次加入并查集,说明这条路是必须的 水泥路同样 这样就把必需边求出来了,剩下就可以随意加 ...

  6. 【BZOJ4477】字符串树(可持久化Trie)

    此题花费我整整三天的功夫.还在NoiP贴吧发过贴. 最后发现trie树建新节点时信息未完全复制,真是愚蠢之极. 言归正传. 如果我们已经知道了每个点上的trie树那么询问就是sum[x]+sum[y] ...

  7. Html.AntiForgeryToken 防止伪造提交

    原文发布时间为:2011-05-03 -- 来源于本人的百度文章 [由搬家工具导入] In this tutorial, I am not going to discuss the concept i ...

  8. C#、.Net学习资料免注册下载基地。。。

    原文发布时间为:2008-11-28 -- 来源于本人的百度文章 [由搬家工具导入] http://club.topsage.com/forumdisplay.php?fid=121&filt ...

  9. django + gunicorn + supervisor

    在服务器上跑着一个Django项目,想用supervisor管理起来,遇到一个小问题,记录一下本来启动Django项目的命令是用的manage.py ,  但是这中方法有个很神奇的坑,就是ctrl + ...

  10. pip源配置

    1.使用配置文件配置文件[global]trusted-host=mirrors.aliyun.comindex-url=http://mirrors.aliyun.com/pypi/simple/ ...