辨析引用和指针
代码段
// 定义引用变量的方法// 首先,定义一个指针变量
int a = 1;
int * p = &a;
// 然后,将&符号移动到*符号的位置,覆盖*符号
int a = 1;
int & p = a;
// int * p = &a; => int & p = a;
// 按照这种方式,最终p是一个引用变量
// 同一内存#include<iostream>
using namespace std;int main()
{int a = 1;int * p = &a;int & b = a;// a、*p、b属于同一内存// int & c = 1;// 此处代码错误!// 为引用赋的值必须可以取地址!*p = 2;cout << a << " " << *p << " " << b << endl;b = 3;cout << a << " " << *p << " " << b << endl;cout << "总结:a、*p、b属于同一内存" << endl;return 0;
}/*
2 2 2
3 3 3
总结:a、*p、b属于同一内存
*/
// 指针和引用的简单运用#include<iostream>
using namespace std;void swap1(int * a, int * b)
{int t = *a;*a = *b;*b = t;
}void swap2(int & a, int & b)
{int t = a;a = b;b = t;
}int main()
{int x = 1;int y = 2;cout << "使用swap1()之前:x的值为" << x << ",y的值为" << y << endl;swap1(&x, &y);cout << "使用swap1()之后:x的值为" << x << ",y的值为" << y << endl;swap2(x, y);cout << "再使用swap2()之后:x的值为" << x << ",y的值为" << y << endl;return 0;
}/*
使用swap1()之前:x的值为1,y的值为2
使用swap1()之后:x的值为2,y的值为1
再使用swap2()之后:x的值为1,y的值为2
*/
// 数组、指针、引用#include<iostream>
using namespace std;int main()
{int array[5] = { };int * p = array;cout << sizeof array << endl; // 20cout << sizeof p << endl; // 8int (& q)[5] = array;// 定义引用变量q来引用array数组,q相当于array的别名// int (* q)[5] = &array; => int (& q)[5] = array;cout << sizeof q << endl; // 20return 0;
}/*
20
8
20
*//*
关于输出结果的说明1、sizeof运算符用于获取对象或类型的大小(以字节为单位)
2、对于sizeof array,数组 array 的大小取决于数组中的元素数量和元素类型的大小
在本例中,array是一个具有5个int元素的数组
每个int类型的大小通常是4字节(具体的大小可能因编译器和平台而异)
因此,sizeof array返回20
3、对于sizeof p,指针p的大小通常是机器字长相关的
即在64位系统中,指针大小为8字节;
在32位系统中,指针大小为4字节
4、q相当于array的别名
因此,sizeof q等于sizeof array,同为20
*/
辨析左值引用和右值引用