| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2117 人关注过本帖
标题:[求助]const int *p;的声明问题
只看楼主 加入收藏
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
 问题点数:0 回复次数:10 
[求助]const int *p;的声明问题
const int *p;声明的是什么?不是一个指向常量的指针么?
那为什么该指针还可以指向一个变量?
比如:
const int *p=0xff;
int a=3;
p=&a;
这个指针p的指向地址还是改了,难道我理解错了?
请高手和版主老大们帮帮忙,给个解释,谢谢.
搜索更多相关主题的帖子: int const 声明 指针 变量 
2006-07-02 18:06
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
const int *p 同 int const *p
*p不可改变.
p可改变.

const不是常量.

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-02 18:16
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
谢谢SunShining版主,小子我懂了。
被人问得自己都乱成一团了。
看来自己概念还很不熟悉。再次谢谢了。

对不礼貌的女生收钱......
2006-07-02 18:25
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
const int *p 同 int const *p
两种形式差别挺大。

我的原则很简单:不做不喜欢的事!
2006-07-02 19:55
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 

愿闻其详.谢谢.


对不礼貌的女生收钱......
2006-07-02 20:03
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 

以前我似乎发过关于const用法的文章,但后来我修改了那文章中一些部分,因为那些部分理解有误。我贴上相关内容给你吧
===============================================================
int a[] = {1, 2, 3, 4, 5};

——const int *p = a; //p是指向常量的指针,const修饰的是int *p.因此,不可以通过给指针 //赋值来改变数组中的数据,但指针可以移动.例如:
// *p = 10; /*错误*/
// *(p + 2) = 1; /*错误*/
//可以这样理解:P就死也要指向a,所以它不可以改变它其中任何一个
//元素的值。但是a就不一样了,它是自由的,它想怎么改变值就怎么
//改变。

——int * const p = a; //看这表达式,const的位置和第一个不同吧!他们的用法和作用 //就完全不一样了。这时候p是指针常量,我们知道,指针是指向向 //了一个数组的首地址,那么,它的位置就不可以改变了。了。 //因此,指针P不能移动.但是它指向数组第一个数据,所以它可以而且只 //可以改变数组第一个数据的值。这一点请别误解,指针常量只是它的地
//址不可以改变,并不是它指向的内容一定不可以改变,这一点切记!
//好啦。假如你又不理解,偶有一个比较形象的例子来说明:
//假如有一个固定的人拉着另外一个人的手,注意,固定的人相当 //于他是不可以由其他人来替换的。但是他可以拉其他人的手, //并不一定规定他必须拉同一个人的手啊。现在你应该可以有个比 //较深的印象和理解吧:P
//下面举几个例子帮助理解:
// *p = 2; /*可以*/
// *(p+1) = 10; /*可以*/
// p++; /*不可以*/

——const int * const p = a; //假如前面两种表达式的本质你理解了,这种表达式你来理解根本
//没有问题,const现在有两个,而且一个const的位置是第一种情 //况的位置,第二个const是第二种情况的位置,所以这表达式的功 //能就是前两种情况的作用总合。这里不多说!
//下面举几个例子帮助理解:
// *p = 2; /*不可以*/
// *(p + 2) = 10; /*不可以*/
// p++; /*不可以*/


我的原则很简单:不做不喜欢的事!
2006-07-02 20:09
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
汗一个,格式都变了,楼主对不起啊,讲究看看

我的原则很简单:不做不喜欢的事!
2006-07-02 20:10
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 

我记得他们是一样的啊

const int * const p
也等同与
int const *const p


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-02 20:15
一叶知秋
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2006-6-3
收藏
得分:0 
cost int *P;
这种形式声明的指针可以后这样理解:
在程序中你可以根据需要随时将P指向其它的int类型变量,如

int a=4,b=8;
p=&a;/* 此时p指向a */
p=&b;/* 此时p指向b */

但是不管p是指向a还是指向b,你都不可以通过间接运算(如*p=500;)去改变p当时所指向变量的值


int *const P;
这种形式声明的指针可以后这样理解:
p指针所指向的变量在初始化时确定,以后你不可以再让p指向其它的变量,也就是说p永远指向其初始化时所指向的变量,如
int a=4,b=8;
p=&a;/* 此时p指向a */
p=&b;/* 此句将出错,你不可以再改变p的指向*/
*p=500;

但是,你却可以通过间接运算(如*p=500;)去改变p所指向变量的值


2006-07-03 16:09
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 

LZ是一点就通的人..没必要说的这么明白


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-03 17:40
快速回复:[求助]const int *p;的声明问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016838 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved