(1.1.6.1)一个例子让你搞懂“指针和引用”以及const的用法、空指针
2015-03-11 13:28
405 查看
空指针是指()所指向的空间位置就是地址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一个指针之后,只是放了内存,指针依然存在,为了安全起见,应该置空
指针+整数:移动步长为数据的字节数
我们判断空指针用 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
相关文章推荐
- const修饰指针和引用的用法
- 【unity3d游戏开发之基础篇】unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
- 栈 堆 易错的地方(字符串拷贝 以及 一个重要的指针用法)
- C语言中的const用法以及常量指针与指针常量(有口诀!)
- 指针与引用的区别以及引用的三种用法
- const——指针和引用以及复合类型
- C++中指针,引用与const,以及const中的临时量对象的探讨
- const修饰指针和引用的用法
- 简述一下二级指针以及指针的引用在结构体中用法
- c语言:对于一个变量n,const用法和指针的比较
- Unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序
- const修饰指针和引用的用法
- 常见的指针数据类型以及const用法详解
- c++引用和const 用法 数组 指针
- 指针与const, 关于C专家编程中的一个例子
- 射线的原理用法以及一个利用射线实现简单拾取的小例子
- c语言:对于一个变量n,const用法和指针的比较
- 什么时候用引用,什么时候用指针的一个小例子
- 数组不是指针——数组地址不能动态分配空间,一个小例子关于指针移动,以及malloc