保护数组内容的const

#define months 10
const int days[months]={1,2,3,4,5,6,7,8,9,10};
days[9]=44;///试图改变数组,将得到编译错误的消息
//
///指向常量的指针不能用于修改数值
double rates[5]={88.99,100.12,59.45,183.11,340.5};
const double *pd =rates;///pc声明为指向const double 的指针,这样,就不可以用pc修改他所指向的数值
* pd=29.89;//不允许
pd[2]= 222.22;//不允许
rates[0]=99.99;///允许,因为rates不是常量
///无论采用数组符号还是指针符号,都不能使用pd 修改所使用数据的值,但是,rates并未声明为常量
///所以仍可以用rates来修改其数值。*****要注意*****还可以用pc来指向其他地址:
pd++;/*让pd指向rates[1]*/
///通常把指向常量的指针用作函数参量,以表明函数不会用这个指针来修改数据
void show_array(const double ar[],int n);等价于
void show_array(const double *ar,int n);
///*******************************************************************************
///将常量或者非常量数据的地址赋给指向常量的指针是合法的:
double rates[5]={88.99,100.12,59.45,183.11,340.5};
const double locked[4]={0.08,0.075,0.0725,0.07};
const double *pc=rates;//合法
pc = locked;//合法
pc=&rates[3];//合法
///只有非常量的数据的地址才可以赋给普通的指针
double rates[5]={88.99,100.12,59.45,183.11,340.5};
const double locked[4]={0.08,0.075,0.0725,0.07};
double *pc=rates;//合法
pc = locked;//非法
pc=&rates[3];//合法
///*******************************************************************************
///函数同理
void show_array(const double ar[],int n);可以接受普通数组和常量数组
show_array(rates,5)//合法
show_array(locked,4)//合法


void mult_array(double ar[],int n,double mult);就只能接受普通数组
mult_array(rates,5,2);//合法
mult_array(locked,4,2);//非法
///关键字const还可以声明并初始化指针,以保证指针不会指向别处
///const 的位置很重要
double rates[5]={88.99,100.12,59.45,183.11,340.5};
double const *pc=rates;
pc = &rates[2];///不允许
*pc = 92.99;///可以,更改rates[0]的值
///这样的指针可以用来修改数据,但它只能指向最初赋给它的地址
///还可以用两个const来创建指针,这个指针既不可以更改所指向的地址,也不可以修改所指
///向的数据:
double rates[5]={88.99,100.12,59.45,183.11,340.5};
const double * const pc = rates;
pc = &rates[2];///不允许
*pc = 92.99;///不允许
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值