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


 空指针是指()所指向的空间位置就是地址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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值