当前位置: 首页 > news >正文

const、指针、引用的综合

目录

代码段

定义引用变量的技巧

内存某处

正误判定技巧

温故知新


代码段

定义引用变量的技巧

// 定义引用变量的技巧#include<iostream>
using namespace std;int main()
{int a = 1;int * p = &a;// 首先,定义一个指针变量int * * q1 = &p;// 然后,将&符号移动到*符号的位置,覆盖*符号int * & q2 = p;// int * * q1 = &p;  =>  int * & q2 = p;// 按照这种方式,最终q2是一个引用变量return 0;
}

内存某处

// 内存某处#include<iostream>
using namespace std;int main()
{// 内存0x0018ff56处int * p1 = (int *)0x0018ff56;         // 正确写法1int * && p2 = (int *)0x0018ff56;      // 正确写法2int * const & p3 = (int *)0x0018ff56; // 正确写法3// const int * & p4 = (int *)0x0018ff56; // 错误写法return 0;
}

正误判定技巧

// 正误判定技巧#include<iostream>
using namespace std;int main()
{int a = 1;int * p = &a;// const int * & q = p; // 错误!// 将const int * & q = p;还原成const int * * q = &p;// 因为const int * *  <=  int * *是错误转换// 所以const int * & q = p;错误!return 0;
}

温故知新

1、注意理解正确转换和错误转换!具体可参考文章const和指针的结合中的正误转换

2、如果const右边没有指针*,那么const不参与类型

// 1
int a = 1;
int * p = &a;
// int *  <=  int *,正确!
int * & q = p;
// 将int * & q = p;还原成int * * q = &p;
// int * *  <=  int * *,正确!// 2
int a = 1;
int * const p = &a;
// int *  <=  int *,正确!
int * & q = p;
// 判定方法1
// 将int * & q = p;还原成int * * q = &p;
// int * *  <=  int * const *,错误!
// 判定方法2
// 将int * & q = p;还原成int * * q = &p;
// int * * q = &p;代表将常量p的地址泄露给普通指针q
// 那么,通过q解引用就有将常量p修改的风险,所以错误!// 3
int a = 1;
const int * p = &a;
// const int *  <=  int *,正确!
int * & q = p;
// 将int * & q = p;还原成int * * q = &p;
// int * *  <=  const int * *,错误!// 4
int a = 1;
int * p = &a;
// int *  <=  int *,正确!
const int * & q = p;
// 将const int * & q = p;还原成const int * * q = &p;
// const int * *  <=  int * *,错误!
http://www.lryc.cn/news/122307.html

相关文章:

  • gitee linux免密/SSH 方式连接免登录
  • 计网第一章
  • windows升级记
  • 【Windows 常用工具系列 5 -- Selenium IDE的使用方法 】
  • 现代无人机技术
  • 【机器学习 | 数据预处理】 提升模型性能,优化特征表达:数据标准化和归一化的数值处理技巧探析
  • 渐进增强和优雅降级区别
  • 使用provision创建的arxml文件,导入到第三方工具需要注意哪些方面?
  • Node.js的核心模块——path
  • 【MAC】 M2 brew安装 docker 运行失败 解决
  • iPhone苹果手机触屏失灵无法关机,如何强制重启
  • SQL-每日一题【1484. 按日期分组销售产品】
  • java重写与重载的区别
  • Unity 框架学习--1
  • ERROR: While executing gem ... (Gem::FilePermissionError)
  • QT学习笔记-oracle oci数据库驱动交叉编译并移植到ARM开发板
  • 微服务03-RabbitMQ
  • QtCreator ui设置界面 Layout 的属性 layoutStretch
  • APP外包开发的iOS开发语言
  • sentinel客户端和dashboard交互
  • vue或uniapp使用pdf.js预览
  • virtualBox桥接模式下openEuler镜像修改IP地址、openEule修改IP地址、openEule设置IP地址
  • git unable to get local issuer certificate (_ssl.c:1007)>
  • QT之时钟
  • 机器学习基础(四)
  • HTML详解连载(5)
  • 【CI/CD】基于 Jenkins+Docker+Git 的简单 CI 流程实践(上)
  • 基于FPGA的PID算法理论详解(1)
  • Neo4j之REMOVE基础
  • SpingBoot-Vue前后端——实现CRUD