C++指针常量,常量指针以及, 引用和指针的区别

news2024/11/30 14:50:58

const修饰指针有三种情况

1. const修饰指针   --- 常量指针

2. const修饰常量   --- 指针常量

3. const即修饰指针,又修饰常量

        

```c++
int main() {

	int a = 10;
	int b = 10;

	//const修饰的是指针,常量指针,指针指向可以改,指针指向的值不可以更改
	const int * p1 = &a; 
	p1 = &b; //正确
	//*p1 = 100;  报错
	

	//const修饰的是常量,指针指针常量,指针指向不可以改,指针指向的值可以更改
	int * const p2 = &a;
	//p2 = &b; //错误
	*p2 = 100; //正确

    //const既修饰指针又修饰常量
	const int * const p3 = &a;
	//p3 = &b; //错误
	//*p3 = 100; //错误
	system("pause");
	return 0;
}
本质: ** 引用的本质在 c++ 内部实现是一个指针常量 .** (指针常量 指正常量的 指向不可修改,指向的值可以修改)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    int a = 10;
    int b = 20;
    int &c = a;
    cout << &c << endl;
    cout << &a << endl;

    int *const p = &a;
    cout << p << endl;

    system("pause");
    return 0;
}
指针常量,即指针是一个常量。那么它对应地址就不能修改,所以引用的指向就无法修改。
但是可以修改这个地址里面存储的数据的值。

 

 综上:

1. 数据类型:

  • 引用: 引用是一个别名,它引用了另一个变量或对象。引用必须始终与其引用的对象具有相同的数据类型。在C++中,引用通常通过 & 操作符声明,如 int &ref = original;

  • 指针: 指针是一个包含内存地址的变量。指针可以指向任何数据类型,包括其他指针。在C/C++中,指针通过 * 操作符声明,如 int *ptr = &value;

2. 内存操作:

  • 引用: 引用在编译时被解析为其引用的对象的地址。在使用引用时,你不需要关心地址操作,因为它们是隐式的。

  • 指针: 指针需要显式地使用地址操作符 & 和解引用操作符 * 来访问或修改数据。这意味着你可以更灵活地操作内存,但也需要更多的谨慎,以防止悬挂指针等问题。

3. 安全性:

  • 引用: 由于引用在创建后不能更改其引用的对象,因此引用相对较安全,不容易出现空引用错误。

  • 指针: 指针可以在运行时重新分配到不同的内存地址,这可能导致悬挂指针、野指针等问题,因此需要更小心地处理指针,以确保内存安全。

4. 语法:

  • 引用: 引用的语法通常更简洁,不需要使用 * 运算符来访问数据。

  • 指针: 指针的语法相对更复杂,需要使用 * 运算符来解引用指针

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1054787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux——进程间通信——管道

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——进程间通信——管道通信 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;进程间通信&#xff08;InterProcess Communication&…

Linux 文件上传、下载

1、通过FinalShell工具虚拟机进行数据交换 在FinalShell软件的下方窗体中&#xff0c;提供了Linux的文件系统视图&#xff0c;可以方便的&#xff1a; 浏览文件系统&#xff0c;找到合适的文件&#xff0c;右键点击下载&#xff0c;即可传输到本地电脑 浏览文件系统&#xff0…

密码技术 (5) - 数字签名

一. 前言 前面在介绍消息认证码时&#xff0c;我们知道消息认证码虽然可以确认消息的完整性&#xff0c;但是无法防止否认问题。而数字签名可以解决否认的问题&#xff0c;接下来介绍数字签名的原理。 二. 数字签名的原理 数字签名和公钥密码一样&#xff0c;也有公钥和私钥&am…

网站使用SSL证书是趋势吗?

随着互联网技术的不断发展&#xff0c;网络安全问题日益受到重视。其中&#xff0c;SSL证书作为网站安全的基石&#xff0c;其重要性不言而喻。SSL证书能够加密网站与用户之间的通信&#xff0c;保护用户隐私&#xff0c;防止信息被窃取和篡改。因此&#xff0c;越来越多的网站…

10.1作业

#include <stdio.h> #include <string.h> #include <stdlib.h> /** function:* 创建一个双向链表&#xff0c;将26个英文字母通过头插的方式插入&#xff0c;通过为尾删的方式读取并删除* param [ in] * param [out] * return */ typedef struct double…

ECharts多个数据视图进行自适应大小的解决方案

项目场景&#xff1a; 在制作数据视图时经常会遇到多个数据视图的情况&#xff0c;在多个数据视图的情况下做自适应是比较麻烦的&#xff0c;这里就详细的分析一下该如何去制作&#xff0c;分享一下我的解决办法及思路。 定义 DOM 容器 这里需要注意一个地方&#xff0c;在定…

《Jetpack Compose从入门到实战》第八章 Compose页面 导航

添加依赖&#xff1a;implementation “androidx.navigation:navigation-compose:$nav_version” Navigation for Compose class MainActivity : AppCompatActivity() {var theme: BloomTheme by mutableStateOf(BloomTheme.LIGHT)override fun onCreate(savedInstanceState:…

Vue3核心源码解析 (一) : 源码目录结构

通过软件框架阅读源码可以对框架本身运行机制进行学习&#xff0c;更能了解框架的API设计、原理及流程、设计思路&#xff1b;我们要知其然&#xff0c;更知其所以然。 Vue 3的源码相对于Vue 2版本有了较大程度的改变&#xff0c;采用Monorepo规范的目录结构&#xff0c;同时使…

JavaScript——APIs

复习&#xff1a; splice() 方法用于添加或删除数组中的元素。 **注意&#xff1a;**这种方法会改变原始数组。 删除数组&#xff1a; splice(起始位置&#xff0c; 删除的个数) 比如&#xff1a;1 let arr [red, green, blue] arr.splice(1,1) // 删除green元素 consol…

【ArcGIS Pro二次开发】(69):使用MapTool实现隐藏和隔离图层

一、MapTool简介 在ArcGIS Pro SDK中&#xff0c;MapTool是一个重要的组件&#xff0c;用于自定义地图操作工具&#xff0c;使用户能够在ArcGIS Pro中执行特定的地图交互操作。 在VS中添加新项&#xff0c;可以找到ArcGIS Pro 地图工具&#xff0c;即为MapTool。 新建后打开c…

全连接网络实现回归【房价预测的数据】

也是分为data&#xff0c;model&#xff0c;train&#xff0c;test import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optimclass FCNet(nn.Module):def __init__(self):super(FCNet,self).__init__()self.fc1 nn.Linear(331,200)s…

​萝卜刀《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书

​萝卜刀《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书 ​萝卜刀《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书

mysql join语句优化实战

生产环境的大表join语句性能经常很差。这里给出大表join语句的优化思路。 准备材料 两张表&#xff0c;t1表N行&#xff0c;t2表M行 CREATE TABLE identity.t1 (id INT NOT NULL COMMENT Id,a INT NULL,PRIMARY KEY (id));CREATE TABLE identity.t2 (id INT NOT NULL COMMEN…

react create-react-app 配置less

环境信息&#xff1a; create-react-app:v5 react:18.2.0 node:18.16.0 如果你不必须使用 less 建议直接使用scss。 因为less配置会遇到很多问题。 配置less过程&#xff1a; 如果你只需要 sass的话&#xff0c;就可以直接使用sass。因为默认配置了scss。 npm、yarn、cnpm、…

wordpress搭建自己的博客详细过程以及踩坑

WordPress作为一款开源的内容管理系统&#xff08;CMS&#xff09;&#xff0c;具有诸多优势。首先&#xff0c;它的易用性使得即使对于没有编程经验的用户来说也能轻松上手&#xff0c;通过直观的用户界面和友好的管理工具&#xff0c;用户可以方便地创建、编辑和发布内容。其…

Mac 上没有 Total Commander,可以用这两款软件来代替

在 Windows 上&#xff0c;我用的最多的文件管理软件是 Total Commander&#xff0c;但转到 macOS 上却没有一款和它功能一样的软件&#xff0c;让人有些不爽。 经过一番搜寻&#xff0c;终于找到了 2 款可以部分代替 Total Commander 的软件&#xff0c;在此与大家分享。 1、…

竞赛选题 大数据疫情分析及可视化系统

文章目录 0 前言2 开发简介3 数据集4 实现技术4.1 系统架构4.2 开发环境4.3 疫情地图4.3.1 填充图(Choropleth maps)4.3.2 气泡图 4.4 全国疫情实时追踪4.6 其他页面 5 关键代码最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 大数据疫…

五、2023.10.1.C++stl.5

文章目录 65、请说说 STL 的基本组成部分?66、请说说 STL 中常见的容器&#xff0c;并介绍一下实现原理&#xff1f;67、请说说 STL 中常见的容器&#xff0c;并介绍一下实现原理&#xff1f;68、请你来介绍一下 STL 的空间配置器&#xff08;allocator&#xff09;&#xff1…

LabVIEW开发光学相干断层扫描系统

LabVIEW开发光学相干断层扫描系统 癌症是一种以异常或受损细胞无法控制生长为特征的疾病&#xff0c;是世界上导致死亡的主要原因之一。以前的研究人员已经表明&#xff0c;患病时组织力学会发生变化。能够同时量化和可视化组织力学和细胞行为有可能弥合我们对这两种癌症驱动特…

地理空间探测器保姆级教程-含实现程序-少理论多操作

1.实现软件excel程序 【传送门】 2.基本步骤 2.1 准备的数据样式 按省份地理位置&#xff0c;分为东中西三大板块 2.2 数据离散化 数据不需要标准化、归一化等X&#xff08;X可能多个&#xff09;数据&#xff0c;需要离散化&#xff0c;eg&#xff0c;使用门槛值&#x…