2015-1-6 const和指针
来源:互联网 发布:代做淘宝店 编辑:程序博客网 时间:2024/06/05 15:12
首先来定义两个数组作为说明的例子。
int a[10]={0};const int b[10]={0};
一、对于Int a[10]={0}看下面几个指针初始化的代码:
int *error_p;//1*error_p=4;int *p=a;//2const int* p1=a;//3int const* p2=a;//4
<span style="white-space: pre;"></span>int* const p3=a;//5
const int* const p_cannotchange=a;//6对于上面6个指针,一一说明:
1.错误!因为error_p没有经过初始化被分配空间,就指向了一个常量。虽然编译会通过,但是运行就会警告error_p未初始化!这样的行为不可控,是很危险的
2.常规的指针初始化,p指向a数组,没什么好说的
3.p1是const int*类型,指针指向的数据类型(*p1)为const int。
p1指向a数组很好理解,前缀const代表不允许通过指针p1来该表a[ ]中的值!就好比对于指针指向的元素加了一个读写保护。但是我们依然可以通过p1++、p1+2等操作来访问a[ ]中的元素。
4.暂时没发现和3有什么区别。
5.p2是int* 型,指针指向的数据类型(*p2)为int。
其值被限定为const,虽然p2指向a[ ],但是其值本身被限定为不可改变。也就是说无法通过p2++等操作改变所指对象!形象的说就是指针自己被保护起来
6.有了上面的基础,很好理解,指针本身被保护无法改变,同时指针指向的元素也被保护无法通过指针来操作。我们能做的仅有访问。
==============================================================
二、对于const int b[10]={0}看下面代码
const int *q2=const_a;//1.合法const int const *q2=const_a;//2.合法int *q1=const_a;//3.非法!int* const q2=const_a;//4.非法!以上4条语句比较好理解,只要遵循指针和所指对象的数据类型一致!即可理解错误在哪里。
const int 型的数组b[ ]必须由const int 类型的指针来指,就如同定义一个结构体struct,必须用struct*来指一样。
以上就是const和指针的一点总结。
0 0
- 2015-1-6 const和指针
- const引用和const指针
- const指针和const引用
- const数据和const指针
- 指向const的指针和const指针
- const对象的指针和const指针
- const指针和指向const的指针
- 指向const的指针和const指针
- 【C和指针】const指针
- 指针和const
- const和指针
- 指针和const
- const和指针
- const 和 指针
- 关于const和指针
- const和指针
- const和指针
- 指针和const
- 计算机视觉图像处理机器学习压缩感知等论文代码大全
- oracle创建表空间、用户及其导入导出数据
- Matlab稀疏矩阵笔记
- LEETCODE: Gas Station
- 2015-01-06
- 2015-1-6 const和指针
- 总体架构
- ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用
- 【看看你公司好不好】一张图就能让你轻松识别:好公司VS烂公司
- 文件信息
- Tomcat6.0安装配置及其在MyEclipse10上的配置
- Unity3D学习之(粒子系统以及相机的跟随)
- 1-20两两相邻和为素数的所有组合(深搜)
- System.out.println和System.err.println的区别