关于指针赋值和const的疑惑

以下摘自《C Primer Plus》第10章:数组和指针,第6节:保护数组中的数据。第301页。人民邮电出版社 2016年4月第一版

关于指针赋值和const需要注意一些规则。首先,把const数据或非const数据的地址初始化为指向const的指针或为其赋值是合法的:
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]; //有效;

疑问:“把const数据或非const数据的地址初始化为指向const的指针”。
三个有效的例子中,我看不出到底哪个是被初始化了。
const数据和非const数据分别为,数组locked和数组rates,数组的地址也已经建立,现在把他们的地址初始化是什么意思?三个例子中,后面两个都是赋值,只有第一个是初始化,但这不是指针pc的初始化么?跟数组的数据有什么关系?

初始化 指的是在变量声明的同时,给变量赋值,这个“赋值”行动 叫 “初始化”。
例如:
double rates[5]={88.99, 100.12, 59.45, 183.11, 340.5};
声明rates是double数组,有5个元素。并 把赋值号后面的一串数据赋给了rates数组, 这个“赋值”行动 就是初始化。
const double*pc=rates;
声明 pc 是 const double 型指针。并 把 赋值号后面的 rates数组 的首地址 赋给了 指针 pc。 这个“赋值”行动 就是初始化。
====
rates[] 数组 不是 const. locked[] 数组 是 const. 指针 pc 是 const。
pc=locked; 这是赋值语句, 让 指针 pc 指向 locked 数组 的首地址。
pc=&rates[3]; 这是赋值语句, 让 指针 pc 指向 rates[3] 数组元素 的地址。
====
const 的作用是保护数据,声明为 const 的数组元素数据,一旦初始化后它的数据就不允许改变。
例如: pc=locked; -- 指针 pc 指向 locked 数组
若有语句 *pc=5; (实际意思等价于 locked[0]=5; ) 这就出错。因 const 的数组元素 ,它的数据不允许改变。追问

const double*pc=rates;
这个到底是指针pc被初始化了,还是rates被初始化了,还是互相被初始化了?
我理解的是指针pc被初始化了,所以那句“非const数据的地址初始化为指向const的指针”,这句话我就理解不了了。

温馨提示:答案为网友推荐,仅供参考
相似回答