指针
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) 编辑 收藏 举报