const
来源:互联网 发布:努比亚z11mini网络 编辑:程序博客网 时间:2024/05/04 00:54
指针和const将const用于指针有一些很微妙的第方,指针总是看起来很微妙)我们来详细的探讨一下,
用const声明常量是必须提供初始化
如
Const int maxsize=100;
可以用俩种不同的方式将const关键字用于指针,
第一种方法是将指针指向一个常量对象,这样可以防止使用指针来修改所指向的值。
第二种方法是是将指针本身声明为常量,这样可以防止指针指向的位置。下面来看细节
Int age =39
Const int *pt=&age;
该声明指出,*pt指向一个const int (这里为39)。因此不能使用pt来修改这个值。换句话说*pt的值为const,不能被修改
*pt+=1;//invalid beacase pt pintrt to constint ;
cin>>*pt///invalid for the samereason
现在来看一个很微妙的问题,pt的声明并不意味着他只想的值实际上就是一个常量,而是意味着对pt而言这个值就是常量,例如,pt指向age,而age不是const,可以直接通过age的值来修改age的值但不能通过pt指针来修改它
*pt=20;//invalid becase pt pointer to aconst int;
Age=20;//valid becase age is not declare tobe const
可以讲常规变量的地址赋给常规指针,以上要轮的是将常规变量的地址付给指向const的指针。还有俩种可能
1:将const变量的地址赋给指向const的指针如
Const float *pe=&g_earth=9.80;constfloat *pe=&g_earth;//valid
另一种情况是将const地址赋给常规指针//这种情况不行
Const float g_moon=1.63;
Float *pe=&g_noon;//invalid
假设有一个const数组组成的数据
Constmonth[12]={31,28,31,30,31,31,30,31,30};
则禁止将常量数组的地址赋给非常量指针,将意味着不能将数组名作为参数传递给使用非常量形参的函数
Int sum(int arr(),int n)//should have beenconst int arr[]
.........
..........
int j=sum(months,12);//not allowed
上述函数调用将construction指针(month)赋给非const指针(arr),编译器将禁止这种函数的调
用
但若month为非const可以这样用Int sum(const int arr[],int n)
Int j=sum(month;12);
即非常指针赋给常指针
在面向对象里非常长成员函数可以调用常成员函数,但常成员函数不可以调用常成员函数
进了能使用const
将指针参数声明指向常量数据的指针有俩条理由
l 这可以避免无意间修改数据而导致的编程错误
l 使用const函数接受处理const和非const实参,否则将只能接受非const数据
如果条件允许,则应将指针性灿灿指向const的指针
还有另一个微妙之处
Int age=39;
Const int *pt=&age;
第二个声明是防止pt修改39,但无法防止修改ipt的值,也就是说可以将一个新地址赋给pt;
Int sage=80;
Pt=& Sage;
但仍然不能用pt修改他指向的值(现在为80)
以下使用const的方式使得指针的值无法被修改
Int sloth=3;
Const int *ps=&sloth;
Int *const finger=&sloth;
在最后的声明中,关键字的位置与以前不同。这种声明格式使得Finger只能指向sloth,但允许使用finger来修改sloth的值,中间的声明不允许ps来修改sloth的值,但允许ps指向另一个位置
- const
- const
- const
- CONST
- const
- const
- const
- const
- const
- const
- Const
- const
- const
- const
- CONST
- const
- const
- const
- shell中source命令和.点命令对当前父shell的影响
- vb写的考试大题答案14,15,16,17,18
- 两个线程同时调用同一个处理函数的互斥问题
- Linux里设置环境变量的三种方法
- 【2013.1.27】诸葛先生,你到底亮不亮?——Decorator
- const
- 利用JDK7的NIO2.0进行I/O读写和文件操作监控
- POCO之Number Format
- Android 绘制动态的曲线图
- 写一个内存拷贝函数
- web.py 环境的配置以及一些basic knowledge
- #,##讲解
- POI 设置Excel样式
- gcc与vc的部分区别