网站seo推广多少钱,花里胡哨的网站,什么浏览器适合看网站,网站建设开发程序目录
辨析引用和指针
代码段
定义引用变量的技巧
同一内存
指针和引用的简单运用
辨析两类指针
数组、指针、引用
辨析左值引用和右值引用
代码段
左值引用和右值引用 辨析引用和指针 1、引用是一种更安全的指针 说明#xff1a;引用必须初始化#xff0c;而指针可…目录
辨析引用和指针
代码段
定义引用变量的技巧
同一内存
指针和引用的简单运用
辨析两类指针
数组、指针、引用
辨析左值引用和右值引用
代码段
左值引用和右值引用 辨析引用和指针 1、引用是一种更安全的指针 说明引用必须初始化而指针可能是野指针 2、引用必须初始化指针可以不初始化 3、引用只有一级引用没有多级引用指针有一级指针也有多级指针 4、定义一个引用变量和定义一个指针变量的汇编指令是相同的 通过引用修改内存值和通过指针解引用修改内存值的底层指令也是相同的 代码段
定义引用变量的技巧
// 定义引用变量的技巧// 首先定义一个指针变量
int a 1;
int * p a;
// 然后将符号移动到*符号的位置覆盖*符号
int a 1;
int p a;
// int * p a; int p a;
// 按照这种方式最终p是一个引用变量
同一内存
// 同一内存#includeiostream
using namespace std;int main()
{int a 1;int * p a;int b a;// a、*p、b属于同一内存*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属于同一内存
*/指针和引用的简单运用
// 指针和引用的简单运用#includeiostream
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的值为1y的值为2
使用swap1()之后x的值为2y的值为1
再使用swap2()之后x的值为1y的值为2
*/
辨析两类指针
// 辨析两类指针#includeiostream
using namespace std;int main()
{int array[5] { };int * p array;int (* q)[5] array;return 0;
}/*指针p
指针p初始化为指向数组array的第一个元素的地址即array[0]的地址
指针p存储了array的起始地址指针q
指针q初始化为指向整个数组array的地址使用括号来明确类型
指针q存储了整个数组array的地址两者的区别
p是一个指向单个int元素的指针而q是一个指向整个int[5]数组的指针
p可以逐个访问数组元素。例如p将指向array的下一个元素
q作为指向整个数组的指针可以用于传递和处理整个数组也可以通过解引用来访问整个数组*/
数组、指针、引用
// 数组、指针、引用#includeiostream
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
*/
辨析左值引用和右值引用 左值有内存有名字值可变 右值没内存没名字值不变 左值引用 允许使用替代名称来访问同一对象 右值引用 C11提供的右值引用专门用于引用右值 注意右值引用变量本身是左值 代码段
左值引用和右值引用
// 左值引用和右值引用#includeiostream
using namespace std;int main()
{int a 1;int r1 a; // 左值引用r1int r2 9; // 右值引用r2// 以后还可以给r2赋值例如r2 2;// 关于int r2 9;// 首先产生一个值为9的临时量// 然后将临时量的地址记录到r2的内存中// int r3 3; // 错误const int r3 3; // 正确// 以后不能给r3赋值// 关于const int r3 3; // 首先产生一个值为3的临时量// 然后将临时量的地址记录到r3的内存中// 这些步骤和右值引用步骤相同int r4 r2;// 注意右值引用变量本身是左值// 不能用右值引用变量来引用左值// 所以需要使用 左值引用变量 来引用 右值引用变量return 0;
}