加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C Const

发布时间:2020-12-16 09:17:03 所属栏目:百科 来源:网络整理
导读:C90增加了两个属性:不变性和易变性. 通过关键字const 和 volatile 声明的, 这样就创建了受限类型(qualified type). C99 增加了第三个限定词restrict,用以方便编译器优化。 类型限定词 const? 如果变量声明中带有关键字const,则不能通过赋值、增量或减量

C90增加了两个属性:不变性和易变性.

通过关键字const 和 volatile 声明的, 这样就创建了受限类型(qualified type).

C99 增加了第三个限定词restrict,用以方便编译器优化。

类型限定词 const?

如果变量声明中带有关键字const,则不能通过赋值、增量或减量来修改该变量的值。

const int nochange; /* constant */
nochange = 12 /* false */

可以初始化一个const 变量, 初始化之后,不可以再改变它。

const int nochange = 12  // true
const int days1[3] = {31,30,31}; // true

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

特别注意区分: 指针本身是const? ? ?与? ? ? ? 指针指向的值是const

const 紧挨着的是什么,什么就是不变的

const int days1[3] = {31,30,31}; // true? 相当于 const int *days1 ;? const在 * 左边, 使得数据成为常量

const float *pf? ; // const 紧挨着 float,说明 float常量是不变的

float *const pt ;? // const紧挨着 指针pt,说明是一个常量指针

float const *pt; // const紧挨着 *pt,相当于解引用,是float 常量,不是指针,注意区分

后面有更好的理解方法!!!

1. 指针指向的值是const

const float *pf ;? // pf 指向一个常量

特别注意: const放置在不同的位置,有不同的含义,注意区分!!!

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

把const放在 类型名 的后边和 * 的前边,意味着指针不能够用来改变它所指向的值。

总之:下面理解起来比较容易

一个位于 *左边 任意位置的 const 使得 数据成为常量?

而 一个位于 * 右边 的const使得? 指针自身成为常量

?

但是pf本身的值是可以改变的(本身是个地址),它可以指向另一个const值

eg:

const float *pf_new;

pf? = pf_new;

2.?指针本身是const (指针本身的值不可变)

eg:

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

等同于下面的写法

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

必须总是指向同一个地址,但所指向的值可以改变。

3.? 地址是常量,地址指向的内容也是常量

const float * const ptr;

意味着ptr必须总是指向同一个位置(地址),并且它所指位置存储的值也不能改变。

?

4.? 常见用法

常见用法是声明作为函数形式参量的指针。

eg:

一个名为display()的函数显示一个数组的内容。 为了使用它,可以把数组名作为参数传送,但数组名是一个地址,

这样做将允许函数改变调用函数中的数据。下面的原型防止了这样的情况发生。

void display(const int array[],int limit);

在函数原型和函数头部,参量声明 const int array[]? 与 const int *array,该声明表明array指向的数据是不可变的。

5. 对全局数据使用const

6. const 指针变量间的赋值关系

const指针 必须 赋值给 const 指针

但是,非const型指针 可以 赋值给cons指针

7 QAC 0431

8 编码实践

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读