指针和常量整型

const int * limitp; int i=27; limitp=&i;书上写着这段代码表示limitp是一个指向常量整型的指针。这里的i不是变量吗,怎么成常量了呢?

const理解为只读是对的。它和通常说的常量是有区别的。虽然大多书上都这么叫。
另外c和c++中的const的使用也有小的区别。例如
const int size = 10;
int a[size];
在C中编译,它会告诉你数组a期望一个常量长度。
但是在C++中编译是可以的。
但是最初是C先产生的,C中发明使用const的目的仅是为了表示变量的只读属性,告诉编码或读码者,这个变量是只读的,和常量没什么关系。这是初衷。

至于你说的。const int * limitp;
首先根据const的左结合性,它会优先结合修饰左边的,没有才修饰右边最靠近的。所以它修饰int.
因此:const int *limitp;int const *limitp;这两个是一样的功能。
都是声明了一个指针,这个指针指向的int只读.
所以这个指针是可以改变的,只不过不能通过指针修改指向的int.
所以如果有类似*limitp=12这种修改指针指向内存的操作,就会报错。
这种limitp=&i;写法是正确的,而且C语言中也常这样用。
因为limitp是指针。&i也相当于一个指针。
因此完全是可以赋值的。const仅说明,你不能通过改指针修改它指向的值。
并不能说明它指向的这个变量不能在其他地方修改。
#include "stdio.h"

int main()
{
int i = 10;
const int *p = &i;
printf("%d\n",*p);
i = 8;
printf("%d\n",*p);
return 0;
}
limitp=&i;这种写法肯定正确的,因为它就是一个指针的赋值。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-07-21
i是变量,常量指的是limitp。就是说limitp不能再指向其他地址。

==================
看不懂中文别说人误导,我说地址是const,我何曾说过值是const的了?
第2个回答  2010-07-21
const表示只读
不知道这本书上的表示对不对,如果正确,那么应该等效于:

const int * limitp;
const int i=27;
limitp=&i;

可能在limitp=&i;语句里对i的类型进行了强制转换,转换为const int型
第3个回答  2010-07-21
const int* limitp ;
意思就是limitp 指向一个int变量的地址后不能再指向别的了,也就说limitp存放的是内存地址,这个地址不能改变了,是常量。
而地址存放的内容,也就是i的值则是可以变的。
第4个回答  2010-07-21
请问楼上说limitp是指针常量的,int* const limitp
;做何解释?

这里的limitp是指它指向int型常量,既可以将const int的地址赋值给它,也可以是int型。这里有个逻辑,把int型当作const是合理的,比如某些函数不能改变i的值,而其他代码可以改变它,也就是说可以把const属性加到变量上,但注意反过来不行。

所以书上说的是对的,指向常量整型的指针是可以指向变量的地址的。
第5个回答  2010-07-21
一二三楼好像是在误导楼主。
const的实际含义是“只读”,const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。它可以修饰函数的参数、返回值,甚至函数的定义体。
const int * limitp与 int const * limitp两者等效,均表示
指针limitp所指向的内存地址中的数据不能改变,而存储该数据的地址 可变,那么在楼主的问题中,就是说i的值固定为27,不会被包含变量i的程序改动。
另外, int* const limitp则表示指针limitp指向的内存地址为一个固定值,但是存储在该地址的数据内容可以改变。

指针和常量整型
所以这个指针是可以改变的,只不过不能通过指针修改指向的int.所以如果有类似*limitp=12这种修改指针指向内存的操作,就会报错。这种limitp=&i;写法是正确的,而且C语言中也常这样用。因为limitp是指针。&i也相当于一个指针。因此完全是可以赋值的。const仅说明,你不能通过改指针修改它指向的值。并不...

什么是常量指针,指针常量
那么常量指针,就是指向常量类型地址的指针。比如const int * p;而指针常量,本质是常量。什么类型的常量?指针类型的常量,为了能够有个术语结构上的对比,你肯定知道整型常量,也知道是这么定义的:const int a;但指针常量,是这么定义的 : int * const a;const 在 *前面,是常量指针,const在*后...

指针、引用和常量的关系
接着,常量概念的引入使得变量的值不能被改变。常量可以是变量、指针或引用,但不能是引用类型,因为引用本身就是绑定到一个变量的,无法再成为另一个常量的一部分。例如,定义“int *const p = &val;”时,从左至右理解,“const”表明p是一个常量指针类型,而“*int”表示p作用于整型指针。从整...

什么是常量指针,指针常量?
1.常量指针 指的是指针的值是不能被改变的,就是指针的值是常量,假设 int *const p;关键点来了: const 修饰的是p,p是一个指针,我们知道指针也是一个变量,内存也会分配空间给他,他里面存的是地址,这样我们根据const关键字的属性就知道了: 指针变量p里面的值是不能改变的,指针变量里面是...

详解C语言指针与常量的关系
详解C语言指针与常量的关系在C语言中,常量和指针有着紧密的联系。常量可以用于创建符号常量和各种类型的常量,包括数组常量和指向常量的指针。尝试修改数组常量或通过指向常量的指针修改其值,编译器会报错,因为它们都是只读的。例如,常量指针`const double *p`不会允许通过`p++`来改变它所指向的值,...

如何理解常量指针与指针常量?
在讨论常量指针与指针常量时,首先我们需要了解这六种不同的指针定义形式。这六种形式分别是:①const int p; ②const int* p; ③int const* p;④int * const p; ⑤const int * const p; ⑥int const * const p;其中①表示常量整数。对于后面五种形式,我们可以使用一个便捷的方法来记忆:...

c语言常量的正确表示是什么?
正确的C语言常量是指针常量。在除了‘C\/C++’的一些高级程序语言中,‘常量’可以被zhuan称作,“在一个信息变化过程中,始终不发生改变的量”,其可以是不随着时间变化的某些量的固定信息;也可以表示为某一数值的字符(或字符串),常被用来标识、测量和比较两者的差异。用一对单引号将一个字符括起来...

指针常量和常量指针的区
指针常量和常量指针在C++中具有不同的性质。主要的区别在于,常量指针一旦初始化,指向的内存地址是固定的,不能更改指向,例如`int * const a = &b`,即使想改变`a`指向其他变量如`a = &c`也是不允许的,但可以修改其指向内存的值,如`*a = 20`。而指向常量的指针,如`int const *a`,...

c语言四种基本数据类型
C语言四种基本数据类型:整型,浮点型,指针,聚合类型(数组和结构体)。浮点型:浮点型包括单精度型和双精度型。(1)单精度型:一般占4个字节(32位),floata=5。C语言的三种基本数据类型为整型、实型、字符型。整型。包括short、int、long等,用以表示一个整数,默认为有符号型,配合unsigned关键...

C语言的数据类型分为几种?
short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。在不同的系统上,这些类型占据的字节长度是不同的:在32 位的系统上 short 占据的内存大小是2 个byte;int占据的内存大小是4 个byte;long占据的内存大小是4 个byte;float占据的内存大小是4 个byte;double占据...

相似回答