黑马程序员技术交流社区
标题:
“输入输出函数总结及对比”和 const(二)
[打印本页]
作者:
紫荆秋雪
时间:
2015-7-20 17:20
标题:
“输入输出函数总结及对比”和 const(二)
二、const关键字介绍及作用
1、什么是const
const是一个类型修饰符,使用const修饰变量则可以让变量的值不能改变
常量类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的
2、const有什么主要的作用
1>可以定义const常量,具有不可变形
2>便于进行类型检查,是编译器对处理内容有更多了解,消除了一些隐患。
3>可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。同宏定义一样,可以做到不变则已,一变都变!如果想要修改const定义过的内容,只需要:const int max=you want;即可
4>可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。还是上面的例子,如果在函数体内修改了i,编译器就会报错
5>可以节省空间,避免不必要的内存分配。例如
#define PI 3.14159 //宏定义
const doulbe Pi=3.14159 //此时并未将Pi放入rom中
double i=Pi; //此时为Pi分配内存,以后不再分配
double I=PI; //编译期间进行宏替换,分配内存
double j=Pi; //没有内存分配
double J=PI; //再进行宏替换,又一次分配内存
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝
6>提高了效率。编译器通常部位普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高
3、如何使用const
1>修饰一般常量 一般常量是指简单类型的常量。这种常量在定义时,修饰符const可以用在类型说明符前,也可以用在类型说明符后。
比如:
int const x=2;
或
const int x=2;
2>修饰常数组(值不能够改变了)定义或说明一个常数组可采用如下格式:
比如:
int const a[5]={1,2,3,4,5};
或
const int
a[5]={1,2,3,4,5};
3>修饰函数的常参数 const修饰符也可以修饰函数的传递参数,格式如下:
void fun(const int var);
告诉编译器var在函数体中的无法改变,从而防止了使用者的一些无意的或错误的修改
4>修饰函数的返回值:const修饰符也可以修饰函数的返回值,是返回值不可被改变,格式如下:
const int fun1();
const Myclass fun2();
5>修饰常指针
const int *a;
const 修饰指针, a可变,
a指向的值不能被修改
int const *a
const 修饰指针, a可变,a指向的值不能被修改
下面我们通过实例来看看const的影响
程序如下:
打印输出如下:
说明:
这是打印了我们定义的两个变量的值;下面我们来改变一下变量的值看看
打印如下:
总结:
从这个打印图来看可以知道,用const定义过的变量的值是不可以修改的
程序如下:
打印如下:
总结:
从打印图可以知道,当我们用指针来指向const类型定义的变量时,通过指针可以改变const类型定义的变量的值。
值得注意的是,在xcode中是不能实现通过指针可以改变const类型定义的变量的值。这也许是编译器不同造成的差异
下面看看让指针p指向变量b是否可以成功
程序如下:
打印如下:
总结:
从上图打印我们可以知道,指针p是可以随便指向任何一个变量
下面我们看看由const定义的指针p的情况
打印如下:
总结:
从打印图可以知道,const类型指针指定指向地址后是不可以再改变地址,但是可以改变指向变量的值
打印如下:
总结:
从上图可以知道:用const int *const p=&b 定义的指针,既不能改变值也不能改变指针的指向
总结:
关于const和指针变量的总结
看const 和 *的位置:
如果 const 在 * 的左侧 表示指针变量指向的变量的值不能变,但是指向可以改变
如果 const 在 * 的右侧 表示指针变量指向的变量的值可以改变,但是指向不可以改变
如果 const 出现在 * 的两侧, 表示指针变量的指向和值都不能改变
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2