随笔-6  评论-3  文章-0  trackbacks-0

学习C++第四天,在看《c++程序设计语言特别版》,昨天看到了指针和常量,一头雾水,只能这么形容,可能时间有点晚了,注意力不够集中了,反正是没看明白,今天赶紧接上,争取渡过这个难关,真别说,静下心来细细的看一会,真的有收获,怕忘了,赶紧记下,大家看我理解的对不对。
《c++程序设计语言特别版》5.4.1 指针和常量

“将一个指针的声明用const‘预选固定’将使那个对象而不是使这个指针成为常量”:

      理解:一个指针的声明,如 char* pc -- pc是指针,加const后 const char* pc = s;,则使pc所指的内容s成为常量,pc就成了指向常量的指针
“要将指针本身而不是被指对象声明为常量,我们必须使用声明运算符*const”
      理解:*const 是运算符,可以将指针本身声明为常量

void f1(char* p)
{
   (1)   char s[] = "Gorm";
   (2)   const char* pc = s;   //指向常量
   (3)   pc[3] = 'g';   //错误:pc是指向常量的
   (4)   pc = p;   //ok

   (5)   char *const cp = s;   //常量指针
   (6)   cp[3] = 'a';   //ok
   (7)   cp = p;   //错误:cp是常量指针

   (8)   const char *const cpc = s;   //到const的const指针
   (9)   cpc[3] = 'a';   //错误:cpc指向常量
   (10)   cpc = p;   //错误:cpc本身是常量
}
      理解:
      (2) char* pc---指针的声明
            const char* pc=s---指s成为常量,pc成为指向常量的指针
      (3) pc[3]='g';错误---原因:pc所指的内容已经是常量,不能对p所指的内容赋值pc[3]=....相当于对pc所指的内容赋值了
      (4) pc=p;正确---原因:pc本身并不是常量,是指针,同传入的参数p一样

      (5)通过*const,将指针本身变成了常量,故cp是常量指针
      (6)cp[3]='a';正确---原因:cp本身是常量,但其所指的内容不是常量,故可以对其所指的内容进行赋值,cp[3]就是其所指的内容
      (7)cp=p;错误---原因:cp本身是常量,不能对常量进行赋值

      //如果上面这些都能理解,那面下面这句一看就明白了:)
      (8)*const将cpc声明成了常量指针(cpc是常量,是指针),前面再加一个const,则cpc所指的内容也成了常量(s成了常量),故cpc是指向常量的常量指针(到const的const指针)
      (9)(10)不用说了,cpc是常量,其所指的内容也是常量,既不能对其所指的内容cpc[3]赋值,也不能对其本身cpc赋值。

      OK,记录完毕,语言很显罗嗦,实是为了明天看时还能看懂:),有理解不对的地方,还望指教。

posted on 2007-06-08 22:29 zhanghaibin 阅读(238) 评论(1)  编辑 收藏 引用 所属分类: 学习笔记

评论:
# re: 指针 and 常量 and 指针[未登录] 2008-07-28 11:23 | foxtail
书上有种方法就是全反过来读就理解了
如果我没记错的话  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理