指针

1.指针初始化和赋值操作的约束:

  0值常量表达式;类型匹配的对象的地址;另一对象之后的下一地址;同一类型的另一个有效地址。

2.void指针

double obj=3.14;
double *pd=&obj;
void *pv=&obj;
pv=pd;

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

操作:与另一指针进行比较;向函数传递void*指针或者返回*指针;给另一个void*指针赋值;

3.指向const对象的指针

强制要求,指向const对象的指针必须有const特性:

const  double  *cptr//cptr指向一个const对象

  但是cptr本身不是const类型,定义时不用初始化,可以指向另一个const对象。也可以指向一个非const对象,但不能修改指向对象的值

   实际程序中,指向const的指针常用作函数的形参

4.const指针

本身的值不能修改。

int   errNum=0;
int  *const   curErr=&errNum; 

  指针指向的地址不能修改,必须在定义时初始化。但是可以改变指向的对象的值。

5.指向const对象的const指针

const  double  pi=3.1415;
const    double   *const    pi_ptr=π

  既不能修改指向的地址,也不能修改指向的对象的值。

6.动态数组:

c语言中分配存储空间:malloc和free  

c++中:new  和delete

(1)定义:

指定类型,数组长度,不必命名,返回的是第一个元素的指针

int *pia=new int[10];

(2)初始化:只能初始化为默认值,构造函数或者内置初始化

int *pia=new int[10]();

(3)const对象的动态数组

必须初始化:

const  int *pci_ok=new  const  int[10]();

(4)允许动态分配空数组

编译时不知道数组长度:

size_t n=get_size();
int *p=new int[n];
for(int *q=p;q!=p+n;q++)

(5)释放:

delete  [] p;

  

posted on 2014-06-09 22:48  vincent_SK  阅读(106)  评论(0编辑  收藏  举报