关于const和指针的使用

powerpanda 2002-05-26 11:28:36
请问指向常量的指针,常指针,指向常量的常指针之间的区别,最好能举列说明,非常感谢。
...全文
5088 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
effectiveye 2002-05-26
  • 打赏
  • 举报
回复
大家都讲了,我来总结一下吧
指向常量的指针: const Type* ptr
它的值能够改变,也可以赋给非常数变量,但是它所指的对象的
值是不能改变的。(因为是常量,对吧)
常量指针: Type* const ptr
它的值不能改变,(因为是常量),但是它所指的值能改变
指向常量的常量指针:const Type* const ptr
当然也就是说,两者都不能改变了
知道了吧?
cometcheng 2002-05-26
  • 打赏
  • 举报
回复
const int n;
int const f(int n );
int f(int n)const ;
int f(const&int n);
一共就这几种的(好象)一起总结的,:)
sean717 2002-05-26
  • 打赏
  • 举报
回复
指向常量的指针 Pointer to a const object:
int const* ptr;
不可更动*ptr的值

常指针:const pointer to an object
int *const ptr
不可更动ptr的值

指向常量的常指针 const pointer to a const object
const int *const ptr;
*ptr和ptr都不能更动

要区别的话,采取"倒着念"声名的方法很有效
如声名:
int *const ptr;
念成: ptr是一个const的pointer指向一个int

int const* ptr;
则念成:ptr是一个pointer,指向一个const int

最后注意的是:
const int* p ; p是一个pointer指向const int而不是一个const pointer



mylove0618 2002-05-26
  • 打赏
  • 举报
回复
对不起了,几处错误。const指针形式应该如下:
int a;
int * const ip=&a;
同样,指向const常量的const指针形式如下:
const int a=0;
const int * const ip=&a;
抱歉。
mylove0618 2002-05-26
  • 打赏
  • 举报
回复
这几种指针却是很容易弄混淆。下面我谈谈我的看法。欢迎指正。
指向常量的指针。
按照字面意思,这个指针应该指向常量。所以呢,他的形式应该如下:
const int a=1;
const int *ip=&a;
这里我们需要注意const的位置。他在指针指向的变量类型即int之前。这就是说,变量应该是const的。事实上却是如此。其实,对于这种指针的理解,应该起于对const变量的理解。怎么说呢?就是这种指针和一般的指针没有很大的区别,仅仅是指针指向一个const变量而已。而一般的指针就不能够。同时需要注意,这个指针的指向是可以改变的。你仅仅需要注意变量是const就够了。因此,重点在变量是const上。
const指针。
按照字面意思,指针是个常量。换而言之,就是指针在初始化过后,指向将不会发生改变。这里我们需要注意,这种指针和一般的const变量一样,必须要初始化。至于指向的变量,则是一般的变量。形式如下:
int a;
int const *ip=&a;
也许你已经发现,引用其实就是一个const指针。借助于你对引用的理解,相信你已经理解了const指针。
指向const常量的const指针。
如果上面的两种指针你都理解了,我想最后这个指针类型你应该没有什么问题了。他就是一个const指针,指向的变量类型为const常量。形式如下:
const int a=0;
const int const *ip=&a;
这种指针不仅指向的变量不能修改,指针也不能修改。其实就是,首先,这种指针是一个const指针,因此指向不能修改;其次,指向const常量,所以指向的内容也不能修改。
不知道你是否已经理解了?
guoj1997 2002-05-26
  • 打赏
  • 举报
回复
第3种应该是const T * const p;
Januarius_ 2002-05-26
  • 打赏
  • 举报
回复
指向常量的指针是不能通过提领指针来改变常量,const int a=5;
const int *p=&a; *p=6; //Error!
常指针是指指针指向的空间不能被改变 int a=4; int *const p =&a;
*p =6; //OK int b=2; p=&b; //Error!
指向常量的常指针就是把上面两项加起来,什么都不能改变
powerpanda 2002-05-26
  • 打赏
  • 举报
回复
谢谢
zhdleo 2002-05-26
  • 打赏
  • 举报
回复
第3种应该是const T const *p 吧?
guoj1997 2002-05-26
  • 打赏
  • 举报
回复
{ int a[2] = {1, 2};

//指向常量的指针,指针可以变,指针指向的内容不可以变
const int *p = a;//与int const *p = a;等价
p++;//ok
*p = 10;//error

//常指针,指针不可以变,指针指向的内容可以变
int* const p2 = a;
p2++;//error
*p2 = 10;//ok

//指向常量的常指针,都不可以改变
p3++;//error
*p3 = 10;//error
}
prototype 2002-05-26
  • 打赏
  • 举报
回复
c c faq.
carbon107 2002-05-26
  • 打赏
  • 举报
回复
如 int const *p 和const int *p
nlxx 2002-05-26
  • 打赏
  • 举报
回复
go on
fei1703 2002-05-26
  • 打赏
  • 举报
回复
当然,下面谁能讲讲这些指针具体用在哪些方面?
jesion 2002-05-26
  • 打赏
  • 举报
回复
(1)指向常量的指针是指一个指向常量的指针变量,例如:
  const char *str="kkk";
这个语句的含义是:声明一个名为str的指针变量,它指向一个字符型常量,初始化str为指向字符串"kkk"。
  因为使用了const,不允许改变指针所指的常量。所以
   str[3]='a'; //这条语句是错误的,但可以改变str指针的值
   str="ttt"; //合法

(2)常指针是指把指针本身,而不是它指向的对象声明为常量,例如:
char * const str="kkk";
常指针是一个固定的指针,不可以改变它的值,但它所指的数据可以改变。
   str[3]='a'; //这是合法的
   str="ttt"; //不合法,出错

(3)指向常量的常指针是指这个指针本身不能改变,它所指向的值也不能改变。
   const char * const str="kkk";
这样声明了一个名为str的常指针,它指向一个字符常量。
   str[3]='a'; //出错,不能改变指针所指的值
   str="ttt"; //出错,不能改变指针本身

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧