一道怪试题
const long *p = &b; p = &a; *p = 10;。这里p = &a;按照类型匹配很正常,而p是常量的long类型的指针,没有任何问题。但是*p = 10;将报错,这是为什么? 问题点数:20、回复次数:28Top
1 楼h60009493()回复于 2006-10-18 00:32:14 得分 0
const long *p
指向的内容是常量, 不得更改, 但指针的指向可以更改(即可以指向其它常量).
指针可以改变指向,但指向的内容不能够改变
*p = 10
这里10是个常量,*p指向的是一个常量,这里当然不能够赋值.Top
2 楼FaKeChineseCompany()回复于 2006-10-18 00:36:11 得分 0
晕死呀,这种基础语法问题你也叫怪呀?
const long *p; //这个p表示它所指的对象是const的,也就是不能给它所指的对象赋值,
//*p=10; 就是给p所指的对象赋值,无怪乎编译器会报错了,
//就是说,p 的值是可以改变的,但*p 的值是不可改变的Top
3 楼ckt1120(坏人一个,切勿联系)回复于 2006-10-18 07:48:18 得分 0
cosnt long *p
long* const p
是不一样的,前面cosnt修饰的是*p,则*p的值不能被修改.
所以p = 10;企图修改*p的值是错误的.
如果是long* const p,则p的值不能被修改,即p指向的地址不能改变.
而*p的值可以被修改.Top
4 楼gloomy_you()回复于 2006-10-18 08:23:51 得分 0
支持ls!Top
5 楼wanglovec(阳光飞舞)回复于 2006-10-18 13:34:16 得分 0
LS de LS 正解Top
6 楼wanfustudio(雁南飞:知识之败,慕虚名而不务潜修也)回复于 2006-10-18 13:52:08 得分 0
涉及到const的可以把类型去掉
靠哪个就修饰哪个Top
7 楼seraphimpk(无可救药)回复于 2006-10-18 18:00:46 得分 0
大家说的很有道理,那小弟有点不明白了:
const long *p = &b; p = &a; *p = 10;
虽然
指向的内容是常量, 不得更改, 但指针的指向可以更改(即可以指向其它常量).
指针可以改变指向,但指向的内容不能够改变
但是
p=&a表明指针改变了指向,那么为什么这个时候还不能*p = 10呢?Top
8 楼FaKeChineseCompany()回复于 2006-10-18 19:01:33 得分 0
再装B我就往脸上踢了……Top
9 楼lw1a2(一刀 现在改六点下班了:()回复于 2006-10-18 19:11:56 得分 0
-_-!Top
10 楼erwa(二娃)回复于 2006-10-18 19:46:14 得分 0
h60009493() ( ) 信誉:100 Blog 2006-10-18 0:32:15 得分: 0
const long *p
指向的内容是常量, 不得更改, 但指针的指向可以更改(即可以指向其它常量).
指针可以改变指向,但指向的内容不能够改变
*p = 10
这里10是个常量,*p指向的是一个常量,这里当然不能够赋值.
Top
11 楼chenxiaohong3905(啊陈)回复于 2006-10-18 19:58:51 得分 0
指向常量的指针和常量指针是不一样的。Top
12 楼runnerterry()回复于 2006-10-18 20:20:56 得分 0
const long *p;
指向的内容是常量, 不得更改, 但指针的指向可以更改(即可以指向其它常量).
指针可以改变指向,但指向的内容不能够改变
*p = 10
这里10是个常量,*p指向的是一个常量,这里当然不能够赋值.
------------------------------------------------------------
const long* p;//p值(地址)可更改,p(地址)指向的变量不能更改。
cosnt long *p
long* const p
是不一样的,前面cosnt修饰的是*p,则*p的值不能被修改.
所以p = 10;企图修改*p的值是错误的.
如果是long* const p,则p的值不能被修改,即p指向的地址不能改变.
而*p的值可以被修改.
------------------------------------------------------------
long* const p=&a;//p值(地址)不能更改,p(地址)指向的变量a可更改。Top
13 楼awperpvip(挖靠我狂晕来CSDN这么久,竟不知道原来名字可以这么长)回复于 2006-10-18 22:49:16 得分 0
无语了…Top
14 楼skukustar(以黑暗之名の毁灭)回复于 2006-10-19 08:52:52 得分 0
这里的 const说明其修饰的为常引用,常引用所引用的对象不 能被更新,如果用常引用做形参,便不会发生对实参意外的更改Top
15 楼blackmailer()回复于 2006-10-19 08:58:42 得分 0
这个问题确实很基础啊Top
16 楼wave_()回复于 2006-10-19 09:03:27 得分 0
基础问题Top
17 楼bingo80()回复于 2006-10-19 09:19:25 得分 0
quite basisTop
18 楼mekiss(浪青)回复于 2006-10-19 11:06:20 得分 0
*P是常量不能付值Top
19 楼wangdhxy2(流浪的风)回复于 2006-10-19 11:34:22 得分 0
支持 FaKeChineseCompany() 、ckt1120(DeClothes-Mavin) 这两位解释的很清楚Top
20 楼xuqing1980()回复于 2006-10-19 11:50:38 得分 0
long * const p;//常量指针,p的值不可以修改
long const *p; //指向常量的指针,指向的常量值不可以修改
const long *p; //和long const *p一样
常量是放在常量区,指针是在栈区,各管个的,你当然可以改变指针的指向喽,但是不能区修改常量区里面的数据!Top
21 楼Super_007AtChina()回复于 2006-10-19 13:15:43 得分 0
呵呵,新手,鼓励!Top
22 楼lulab()回复于 2006-10-19 13:21:07 得分 0
加油加油Top
23 楼djsky1234()回复于 2006-10-19 14:10:37 得分 0
const //不能给常量赋值。。Top
24 楼swimmer2000(时间是用来浪费的,所以每当我做了一点事都觉得很自豪)回复于 2006-10-20 15:37:17 得分 0
多看书,多思考,多问.Top
25 楼cqgaoke(技高软件公司)回复于 2006-10-22 19:38:50 得分 0
const不能赋值,那要初始化呀.Top
26 楼anrui32(命令提示符(anrui32@163.com))回复于 2006-10-22 20:19:50 得分 0
常量只能初始话一次Top
27 楼gurongrong03()回复于 2006-10-22 20:53:07 得分 0
一个是地址,一个是值嘛,
显然不同的Top
28 楼zhejiang9(麻花!大花裤衩!)回复于 2006-10-22 20:58:50 得分 0
....,多看看基础的书,就不会怪了!:)Top




