您的位置:首页 > 其它

(1.1.6.1)一个例子让你搞懂“指针和引用”以及const的用法、空指针

2015-03-11 13:28 344 查看
空指针是指()所指向的空间位置就是地址0的指针

我们判断空指针用 if(ptr==NULL) 来判断

而NULL在宏定义中定义为0

所以判断空指针就是判断地址是否为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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐