1、指针
指针可以在定义时初始化也可以在后续赋值。引用必须在定义时初始化。
int* ip,iq;//ip为指针类型,iq为整形变量
一个*只能修饰一个指针。
正确定义如下:
int* ip,*iq;
& 表示实体的地址,由于字面值不认为是具有空间地址的实体,所以不能进行&操作;
ip = &23;//错
2、指针运算:
数据类型的三要素:数据表示、范围表示、操作集合;
指针与整型虽然有相同的数据表示、相同的范围表示、但他们具有不同的操作。
3、指针限定:
指针的常量性分两种:指针常量、常量指针
指针常量:相对于指针变量而言,也就是指针地址不能修改的指针。
常量指针:指向常量的指针,指针的实体不能修改。
const int a=78;
int b=10;
int c =18;
const int* ip=&a;//const 修饰指向的实体类型——常量指针
int const* dp = &b;//等价于上一句——常量指针
int* const cp = &b;//指针常量
const int* const icp = &c;//常量指针常量
*ip = 87; //错:常量指针不能修改指向的实体
ip = &c ;//对:常量指针可以修改指针值
*cp = 81; //对:指针常量可以修改指向的实体
cp = &b; //错:指针常量不能修改指针值,即使用同一个地址】
*icp = 33 ; //错:常量指针常量不能修改指向的实体
icp = &b ;//错:常量指针常量不能修改指针值
int d= * icp///正确
注意:const只是限定指针的操作,但不能限定空间上的实体的课改变性。因为一个实体可能不止被一个变量所关联,所以实体被其他关联的变量改变也是有可能的。
4、引用:
引用就是别名,引用定义时必须初始化。
引用的定义形式可以为以下几种:
int someInt = 5;
int& rInt = someInt;
int &rInt = someInt;
int & rInt = someInt;
引用的类型与实体的类型应该是严格一致的。
高级编程多用引用,低级编程多用指针。这主要是从安全因素着眼的。