空指针是指()所指向的空间位置就是地址0的指针
const
const为常量,位于*的有 常量指针 位于*左指向常量的指针
const int* 指向常量的指针,指针是变量
int* const 常量指针,指针本身是常量
const初始化时必须赋值;
int b=500;
const int a; a=50;; //错误; 常量初始化必须赋初值
const int a=500; //正确,定义一个整形常量
1、只有这一种情况const变量可以不在声明的同时定义,那就是const变量作为类的数据成员出现时。
如:
class Myclass
{
cons int a;//注意,在任何情况下,const int a与int const a等价,只不过人们习惯写前者
};
但要注意,这样做是毫无意义的,只是编译能够通过罢了,int const a什么也做不了,因为它没有值。
2、凡是在函数(包括类中的,main函数及其它)中,const常量必须在声明时初始化,这是因为const被视为常量,否则编译不通过:Error:常量 变量“b”需要初始值设定项3、作为全局变量:const int b;// 即不在类中,不在函数中。写代码时不会出现下划线,但编译时报错:如果不是外部的,则必须初始化常量对象。
4、【初始化】作为类的数据成员,只能通过构造函数的初始化列表来初始化。注意在构造函数的函数体内初始化是不行的,相当于又赋值
其它地方的const常量,
都可以直接初始化,即const int b=1;都可以。
const int *a=&b; //正确,定义了一个变量指针,指向了一个常量
int const *a=&b;//正确,和上边的一样
const int * a; a=&b;//正确 a是一个指针变量,不是常量,不需要赋初值
int *const a=&b;//正确 定义了一个指针常量,指向一个整形变量
int * const a; a=&b;//错误 a为常量指针,必须赋初值
(数组的类型)(定义的类型)[]
char ptr[] ptr为一个数组 *ptr指向数组的第一个元素
char*ptr[]={"xx","sf","gs"} ptr为数组,数组中存放指针,指针指向字符
int(* ptr)[] ptr为指向整形数组的指针
int(**ptr)[] ptr为二级指针,指向一个一维数组的指针,数组存储int
int*(*ptr)[] ptr为一个指针,指向一个一维数组,数组中存储int*
int* ptr[]=int*(ptr[]) ptr为指针数组,ptr[]中存储为地址
int (*ptr)(int,int) ptr为一个函数的指针,同时该函数参数为(int,int)
&引用
(1)指针可指向空值,但引用必须指向对象,也就是说在必须声明引用时初始化
int iv;
错误:int &reiv;
正确:int &reiv = iv; 相当于为iv变量起了别名
(2)指针可以重定向,但引用不可以
delete一个指针之后,只是放了内存,指针依然存在,为了安全起见,应该置空
指针+整数:移动步长为数据的字节数
int vector[] = {28, 41, 7};
int *pi = vector; // pi: 100
printf("%d\n",*pi); // 显示28
pi += 1; // pi: 104
printf("%d\n",*pi); // 显示41
pi += 1; // pi: 108
printf("%d\n",*pi); // 显示7