1.引用和指针上
//引用,就是别名
//指针
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
int a = 1024;
int &b = a;//b是a的别名
cout << b << endl;
cout << a << endl;//输出均为1024
//定义引用必须初始化,因为引用就是别名
//引用必须是变量
int i = 1024, i2 = 2045;
int &r = i, &ri = i2;
cout << r << endl;
cout << ri << endl;
//上述都是普通引用,就是非const引用
//下述是const引用
const int ival = 1024;//常量
const int &refVal = ival;//const引用必须指向const常量
//int &ref2=ival会出错
//const int &r = 42;const 引用可以初始化为一个常量
double dval = 3.14;
const int &rall = dval;//const int可以引用为非int,非const就不行,必须指向引用同类型的对象
cout << dval << endl;
cout << rall << endl;
//指针
string s("hello world");
string *sp = &s;
string* ps1,ps2;//ps1是一个指针,ps2不是指针。
string *ps1, *ps2;
cout << s << endl;//原值
cout << sp << endl;//存放变量s的地址,&取地址操作
cout << *sp << endl;//解引用
vector<int> *pvec;//指针指向int类型的向量
int *ip1, *ip2;//ip1是一个变量,这一个变量是一个指针,指针指向的类型int
double dp, *dp2;
//有了指针之后,就可以进行赋值
int ival2 = 1024;
int *pi = 0;//指针是0表示不指向任何对象
int *pi2 = &ival2;
int *pi3;//没有初始化,指针指向一个对象
pi = pi2;//指向同一个对象
//避免使用未初始化的指针,c++无法检查是否初始化和是否是无效地址
int ival2;
int zero = 0;
const int c_ival = 0;
//int *pi4 = ival;//不允许的
//int *pi4 = c_ival;也是不允许的
//int *pi=2121;
int *pi6 = NULL;//NULL就是0
double nul;
double *pi7 = &nul;
double *pi8 = pi7;//pi8是个指针,用来保存地址,pi7也是个指针,保存地址,又把地址放在了pi8里。
//int *pi7 = pd;//错误 d是double
//万能指针
double obj = 3.14;
int k;
void *pv = &obj;//指向double
pv = &k;//指向int,万能指针用处不大
int a = 1;
int *pia = &a;
a = a + 2;
*pia= *pia + 2;
system("pause");
return 0;
}
//c++可以不用指针(迭代器和容器),c语言中特别重要,主要是用来操作数组,字符串主要是字符数租
//指针介绍:指针一般用于低级操作
2.指针下
#include<iostream>
#include<string>
using namespace std;
int main()
{
int ival = 1, ival2 = 2;
int *pi;
int *pi3;//指针在声明的时候可以不进行初始化
pi = &ival;//通过赋值初始化
pi3 = &ival2;
//引用不可以不进行初始化,引用在声明的时候必须进行初始化
pi = pi3;//指针可以改变指向的对象
cout << ival << ',' << *pi << endl;
//引用了一个对象,就不可以再改变,引用只能应用一个对象所以叫别名
//即引用必须初始化而且不能改变
int *pi1 = &ival,*pi2 = &ival2;
int &ri = ival, &ri2 = ival2;
cout << ival <<','<< ri<<','<<*pi1<<endl;
//声明一个指针的指针
int **ppi = π//pi是一个指针,保存地址
pi2 = *ppi;//使用指针的指针
cout << **ppi << endl;
system("pause");
return 0;
}//在c++不建议使用数组和指针,低级应用可以使用,c++是做高级应用的避免使用指针
//java严格拒绝使用指针
//缺点:语法复杂