const 注意点(C)
来源:互联网 发布:程序员的电脑屏幕 编辑:程序博客网 时间:2024/05/16 13:47
在阅读完CPP 5th后,看了关于const的介绍,写下这篇文章增强理解。
关于保护数组内容:
对形式参量使用const
int sum(const int ar[], int n){ int i; int total = 0; for(i = 0; i < n; i++) total += ar[i]; return total;}
这告诉编译器:函数应当把ar所指向的数组作为包含常量数据的数组对待。如果意外使用了诸如ar[i]++之类的表达式,编译器会发现这个错误,通知用户正在试图修改常量。
这里使用const并不要求原始数组固定不变,只是说明函数在处理数组时,应把数组当作是固定不变的。
也就是说,实际参量是可以改变的,但是当实际参量传给形式参量时,函数保证了处理过程中,实际参量不被修改。
const的基本内容:
类似define,可以用来创建符号常量,但是const还可以创建数组常量,指针常量以及指向常量的指针。
eg: const double PI = 3.14159;
eg:const int ar[];
在随后的程序代码中试图改变数组,将会返回错误。
指向常量的指针不能用于修改数值,如下:
int rate[3] = {1, 2, 3};
const int *p = rate; // p 指向数组开始处,声明为指向 const float 的指针。不能使用 p 来修改它所指向的数值
*p = 4; //不允许
p[2] = 9; //不允许
rate[0] = 4; //允许,因为 rate 不是常量
//特别注意!可以让 p 指向其他地址
p++; //让 p 指向 rate[1] 这是合法的
关于指针赋值和 const 的一些规则:
首先,将常量或非常量数据的地址赋给指向常量的指针是合法的:
double rates[5] = {1.22, 2.33, 3.44, 4.55, 5.66};const double locked[4] = {0.01, 0.02, 0.03, 0.04};const double * pc = rates; //legalpc = locked; //legalpc = &rates[3]; //legal
然而,只有非常量数据的地址才可以赋给普通的指针:
double rates[5] = {1.22, 2.33, 3.44, 4.55, 5.66};const double locked[4] = {0.01, 0.02, 0.03, 0.04};const double * pnc = rates; //legalpnc = locked; //illegalpnc = &rates[3]; //legal
这样的规则是合理的。否则,用户就可以使用指针来修改被认为是常量的数据。
使用 const 来声明并初始化指针,以保证指针不会指向别处,关键在于 const 的位置:
double rates[5] = {1.22, 2.33, 3.44, 4.55, 5.66};double * const pc = rates; //p 指向数组的开始处pc = &rate[2]; //illegal*pc = 99.99; //legal
这样的指针仍然可以修改数据,但是不能改变指向。
double rates[5] = {1.22, 2.33, 3.44, 4.55, 5.66};const double * const pc = rates; //p 指向数组的开始处pc = &rate[2]; //illegal*pc = 99.99; //illlegal
这个指针既不可以更改所指向的地址,也不可以修改所指向的数据。
Computer Programming
Answers wanted • 53m
What are some alternatives to Visual Studio for compiling
Computer Programming
Answers wanted • 53m
What are some alternatives to Visual Studio for compiling
- const 注意点(C)
- [C]const几点注意地方
- c语言const 变量使用注意点
- C++const注意点以及用法
- const的注意点
- const修饰符注意点...
- C/C++ const用法注意
- C++中const和#define的优缺点和c语言const的修饰的一些注意点
- C语言注意点收集(待续)
- Objective-C之注意点(一)
- 基础c注意点(一)
- C语言学习注意点(一)
- C语言注意点
- C注意点
- C 基本知识,注意点
- C语言注意点
- C语言注意点
- C语言注意点
- 温故知新--Servlet(四)--servlet线程安全问题
- Apple watch 开发指南(2) 前言
- opencv中测量运行时间的函数
- [zz] QuickSearchBox源码分析
- 阿里巴巴java高级工程师面试题
- const 注意点(C)
- HibernateTemplate_HibernateCallback_HibernateDaoSupport (http://blog.sina.com.cn/s/blog_8020e411010)
- 第一周项目三 时间类
- The operator == is undefined for the argument type(s) int, null
- 准备自己做块飞控,先看看方案
- Codeforces 520E Pluses everywhere (组合+逆元+规律)
- js炫酷小球沿着直线跑动导航条特效源码分享
- Android主管消息提示的Toast.makeText用法
- 第一章第三题