C语言指向非常量的常量指针

也可以声明一个指向非常量的常量指针。这么做意味着指针不可变,但是它指向的数据可变。下面是这种指针的例子;

int num;
int *const cpi = #

有了这个声明:

  • cpi必须被初始化为指向非常量变量;
  • cpi不能被修改;
  • cpi指向的数据可以被修改。

从原理上说,这类指针可以用图1-13来说明。

指向非常量的常量指针

无论cpi引用了什么,都可以解引cpi然后赋一个新值。下面是两条合法的赋值语句:

*cpi = limit;
*cpi = 25;

然而,如果我们试图把cpi初始化为指向常量limit,如下所示:

const int limit = 500;
int *const cpi = &limit;

那么就会产生一个警告:

warning: initialization discards qualifiers from pointer target type

如果这里cpi引用了常量limit,那常量就可以修改了。这样不对,因为常量是不能被修改的。

在把地址赋给cpi之后,就不能像下面这样再赋给它一个新值了:

int num;
int age;
int *const cpi = #
cpi = &age;

如果采用这种做法会产生如下错误信息:

'cpi' : you cannot assign to a variable that is const

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程