C Primer Plus学习 三十九 类型限定词const

        在指针和参量声明中使用const

        在声明一个简单变量和数组时使用关键字const很简单。指针则要复杂一些,因为不得不把让指针本 身成为const与让指针指向的值成为const R分开来。下面的声明表明pf指向的值必须是不变的:

const float * pf: /* pf指向一个常景浮点数值*/

        但pf本身的值可以改变。例如,它可以指向另一个const值。相反,下面的声明表明指针pt本身的值 不可以改变:

float * const pt; /* pt 是一个常量指针 */

        它必须总是指向同一个地址,但所指向的值可以改变。最后,下面的声明:

const float * const ptr;

       意味着ptr必须总是指向同一个位置,并且它所指位置存储的值也不能改变。
       还有第三种放置const关键字的方法:

float const * pfc; // 等同于:const float. * pfc;

        正如注释所表示的那样,把const放在类型名的后边和*的前边,意味着指针不能够用来改变它所指向 的值。总而言之,一个位于*左边任意位置的const使得数据成为常量,而一个位于*右边的const使得指针自身成为常量。

        这个新关键字的一个常见用法是声明作为函数形式参量的指针。例如,假定一个名为display ()的函 数显示一个数组的内容。为了使用它,您可能会把数组名作为实际参数传送,但数组名是一个地址,这样 做将允许函数改变调用函数中的数据。下面的原型防止了这样的情况发生:

void display (const int array[]. int limit):

        在函数原型和函数头部,参量声明const int array[]与const int * array相同,因此该声明表明array指向
的数据是不可变的。
        ANSI C库遵循这一惯例。如果指针只是用来让函数访问值,将把它声明为const受限指针。如果指针 被用来改变调用函数中的数据,则不使用关键字const。例如,ANSIC中strcat ()声明如下:

char *strcat (char *,const char *):

        回忆一下,函数strcat()在第一个字符串的末尾处添加第二个字符串的一份拷贝。这改变了第一个字 符串,但不改变第二个字符串。该声明也体现了这一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值