理解常量指针和指针常量
来源:互联网 发布:jquery数组删除元素吗 编辑:程序博客网 时间:2024/05/23 01:23
之所以会出现常量指针和指针常量都拜一个关键字const所赐,或许可以这么说,是const关键字使得情况变得更加有趣。
常量指针
如何声明一个常量指针,如下:
int const *pa
如何理解呢?
首先看定义,它叫“常量指针”,这四个字前两个是定语用来修饰后面的指针,因此它实际想表达的结果是:他是一个指针
其次更深层次来理解它,在声明int const*pa中它首先是一个定义了指针pa,然后这个指针所指向的内容被const修饰,那么这个指针所指向的结果是一个常量。总结,int const *pa 它定义了一个指针p,这个指针所指向的是一个int型的常量。
指针常量
声明如下
int b = 10;
int *const pb = b;
首先看定义,指针是定语来修饰常量,那么它的本质是一个常量。
在声明int *const pb中定义了一个常量pb并且用指针来修饰它,那么pb的值就是一个常量指针。(注因为指针常量是一个常量,在声明的时候一定要给它赋初始值。一旦赋值,以后这个常量再也不能指向别的地址)
看完概念之后我们来分析他们的用法和区别
上面分别定义了常量指针和指针常量,运行上面的代码会出现如下错误:
所以我们来研究一下const到底做了什么。
常量指针pa:指向的地址可以变,但内容不可以重新赋值,内容的改变只能通过修改地址指向后变换。
即pa = &c完全可以,但 *pa = c用来改变pa所指向的内容并不可以。
在定义中起始已经解释了,但是缘何并且如何理解呢?
可以看到int const *pa = &a;const修饰的是*pa,因此指针指向的内容不能改变即*pa不能修改。但pa的值是可以修改的。
指针常量pb:指向的地址不可以重新赋值,但内容可以改变,必须初始化,地址跟随一生。
同上,可以理解const封锁了pb而不是*pb,因此pb不可以修改,但是*pb可以修改。
常量指针的用处
使用字符串处理函数的时候,应该会注意到这些函数的声明。字符串比较函数的声明是这样的
int strcmp(const char *des, const char *src);
函数的参数声明用了常量指针的形式,就保证了在函数内部,那 个常量不被更改。也就是说,对des和src的内容更改的操作在函数内部是不被允许的。
- 理解常量指针和指针常量
- 常量指针和指针常量
- 指针常量和常量指针
- 常量指针 和 指针常量
- 常量指针 和 指针常量
- 常量指针 和 指针常量
- 指针常量和常量指针
- 常量指针和指针常量
- 常量指针和指针常量
- 常量指针和指针常量
- 指针常量和常量指针
- 常量指针 和 指针常量
- 常量指针和指针常量
- 指针常量和常量指针
- 常量指针和指针常量
- 常量指针和指针常量
- 指针常量和常量指针
- 常量指针和指针常量
- 【Matlab】连接字符串的方法
- Entity Framework Code First数据库连接
- 省市区三级联动
- signal 信号列表 (kill -l)
- vc++ bmp图像二值化
- 理解常量指针和指针常量
- php 下载文件,考虑到各种格式,解决下载时部分出现文件损坏的问题
- 【机器学习实战02】使用k-近邻算法改进约会网站的配对效果
- Gradle 入门知识
- HDU 3466 Proud Merchantss
- 项目中Android https或http请求地址重定向为HTTPS的地址
- 简单的交互式shell(模似shell命令操作)
- 第三届河南省赛
- jdbc编程之数据更新