赞
踩
C++ 引用和指针类型
引用(reference)为一个对象起了另一个名字
通过type &a=b;的形式定义引用类型。
PS:
引用必须要被初始化,也就是必须要指向一个对象,不能指向常量。
引用并非一个对象,引用是一个对象的“别名”
类型一致:引用的别名类型和原来的对象类型要一致
注意:引用定义和使用的时候&的含义不同
int a1 = 100;
int &y1 = a1;
a1 = 101;
cout << "a1=" << a1 << endl;
cout << "y1=" << y1 << endl;
&符号也叫取地址符、and等等
int a1 = 100;
cout << "address of a1=" << &a1 << endl;
结果:
address of a1=003EFCCC
指针是一个变量,其值为另一个变量的内存位置的地址。再次强调指针存放的是地址
声明方式 type *var-name;
注意:
指针定义和使用的时候星号的含义不同
要采用int *a; 的形式定义。
不要使用
int* a;
虽然结果一样但是会产生误导;
多指针变量初始化
int *a,*b;//采用这种写法
int* a,b;或者int *a,b;//仅仅对a定义了指针类型
//指针
//创建指针类型对象 :
int val = 100;
int *p1 = &val;//指针p1存放val的地址
cout << "p1=" <<*p1 << endl;
//指针访问对象(获取对象值)或者给对象赋值:
*p1 = 200;
cout << "p1=" << *p1 << endl;
cout << "val=" << val << endl;
结果:
p1=100
p1=200
val=200
int *p2 = NULL;//需要include cstdlib
int *p2 = nullptr;
int *p2 = 0;
cout << "p2=" << *p2 << endl;//打印会报错
void* 指针可以存放任意类型的对象的地址。
略
指针的指针即**p
从逻辑上讲,一层指针指向某个变量地址,两层指针则指向某个变量地址所在存储的地址。
int val = 1024;
int *p1 = &val;
int **p2 = &p1;
cout << "val " << val << endl;
cout<< "*p " << *p1 << endl;
cout << "**p " << **p2 << endl;
结果:
val 1024
*p 1024
**p 1024
先不写
建议这种多个符号的情况 符号从右向左看,这样确定r是引用类型,然后再往左看 可以知道r引用的是指针
emmm。。。不懂
与const的组合使用。。。略
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。