c++ primer 第4章 数组和指针

来源:互联网 发布:达芬奇调色软件官网 编辑:程序博客网 时间:2024/06/05 10:44

  1. 避免使用未初始化的指针
  2. 对指针进行初始化或赋值只能使用以下四种类型的值: 
  •  0值常量表达式,例如,在编译时可获得0值的整型const对象或字面值常量0.
  • 类型匹配的对象的地址。
  • 另一对象末的下一地址。
  • 同类型的另一个有效指针。                               

把int型变量赋给指针是非法的,尽管int型变量的值可能为0.但允许把数值0或在编译时可获得0值的const量赋给指针。

      3.void*指针

c++提供了一种特殊的指针类型void*,它可以保存任何类型对象的地址

void*表明该指针与一地址值相关,但不清楚存储在此地址上的对象的类型。

void*指针只支持几种有限的操作:

  •    与另一个指针进行比较;
  • 向函数传递void*指针或从函数返回void*指针;
  • 给另一个void*指针赋值;
  • 不允许使用void*指针操纵它所指向的对象。

4.2.5 指针和const限定符

    1.指向const对象的指针

如果指针指向const对象,则不允许用指针来改变其所指的const值。为了保证这个特性,c++语言强制要求指向const对象的指针也必须具有const特性:

 cptr是一个指向double类型const对象的指针,const限定了cptr指针所指向的对象类型,而并非cptr本身。也就是说cptr本身并不是const。在定义时,不需要对它进行初始化,如果需要的话,允许给cptr重新赋值,使其指向另一个对象。但是不能通过cptr修改其所指对象的值:


  • 把一个const对象的地址赋给一个普通的、非const对象的指针也会导致编译时的错误:
  • 不能使用void*指针保存const对象的地址,而必须使用const  void*类型的指针保存const对象的地址:
  • 允许把非const对象的地址赋给指向const对象的指针:
注意:不能使用指向const对象的指针修改基础对象,然而如果该指针指向的是一个非const对象,可以用其他方法修改其所指的对象。



.

1 0
原创粉丝点击