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

C++中的指针

一.指针的定义

        在C++中,指针是一种特殊的变量,它存储另一个变量的内存地址。简单的说,指针是指向另一个数据类型的“指针”或“引用”,我们可以通过指针来间接操作其他变量的值。

指针的基本语法:

数据类型 *指针变量名


简单的使用方法:

#include <iostream>
using namespace std;int main() {// 1. 定义一个要指向的变量int a = 10;// 2. 定义一个指针的空间int *p;// 3. 让指针记录变量a的地址p = &a;// 输出a的地址和指针p的值(即a的地址)cout << "a的地址为: " << &a << endl;cout << "指针p为: " << p << endl;// 4. 使用指针// 通过解引用,指针p指向的内存可以被修改*p = 1000;// 输出修改后的值cout << "a = " << a << endl;cout << "*p = " << *p << endl;return 0;
}

输出结果:

a的地址为: 0x7ffedc3a4c4c   // 这里的地址会因运行环境不同而不同
指针p为: 0x7ffedc3a4c4c   // p 存储的是 a 的地址
a = 1000
*p = 1000

二.空指针和野指针

        在C++里,空指针是一种特殊的指针,表示它不指向任何有效的对象或函数。我们可以这样理解:就是说当我们定义一个指针,这个时候该指针是没有赋值的(此时这个指针叫野指针),因为野指针的值是不确定的,当指针出现在这样的情况的时候,就会有一定概率导致程序的崩溃,所以往往指针创建的开始我们要给指针一个空值使它成为空指针,从而避免野指针带来的潜在崩溃风险。

int* ptr = nullptr; // 现代 C++ 推荐使用 nullptr

三.const和指针

        const在C++中来修饰指针时,有多种用法,具体取决于你将const放在指针声明的那个位置。

1.const修饰指针本身

表示指针不能指向其他地址,既指针的地址常量。

int a = 10;
int b = 20;
int* const ptr = &a;  // `ptr` 是常量指针,指向的地址不能改变*ptr = 30;  // 允许修改 ptr 指向的内容
// ptr = &b;  // 错误,不能改变 ptr 的指向

2.const修饰指针所指向的内容

表示指针所指向的值是常量,不能修改该值。

int a = 10;
const int* ptr = &a;  // `ptr` 是指向常量的指针,不能通过它修改 a 的值// *ptr = 20;  // 错误,不能修改 *ptr 指向的值
ptr = &b;  // 可以改变 ptr 的指向

3.const同时修饰指针本身和指向的内容

表示指针既不能修改指向的内容,也不能修改指向的地址。

int a = 10;
int b = 20;
const int* const ptr = &a;  // `ptr` 是常量指针,且指向的内容是常量// *ptr = 30;  // 错误,不能修改 *ptr 指向的内容
// ptr = &b;  // 错误,不能改变 ptr 的指向

4.总结

修饰位置含义示例说明
const int* ptr指针指向的内容是常量,指针本身可以改变const int* ptr = &a;不允许修改指向的内容,但指针可以指向其他地址。
int* const ptr指针本身是常量,内容可以改变int* const ptr = &a;不允许修改指针的地址,但可以修改内容。
const int* const ptr指针和内容都是常量const int* const ptr = &a;不允许修改指针的地址或内容。

四.指针和数组

作用:利用指针访问数组中的元素。

#include <iostream>
using namespace std;int main() {int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};cout << "第一个元素为:" << arr[0] << endl;int* p = arr; // arr就是数组首地址cout << "利用指针访问第一个元素:" << *p << endl;p++; // 让指针向后偏移4个字节cout << "利用指针访问第二个元素: " << *p << endl;return 0;
}

五.指针和函数

作用:利用指针作函数参数,可以修改实参的值。

        我们这里做个值交换的代码来进行演示说明。第一段代码是直接进行赋值传递,而第二段代码是利用指针进行地址传递。

在看地址传递前先看这个文章方便理解:

C++指针和解引用行为-CSDN博客

值传递:

#include <iostream>
using namespace std;void swap01(int a, int b)
{int temp = a;a = b;b = temp;cout << "swap01 a = " << a << endl;cout << "swap01 b = " << b << endl;
}int main() {int a = 10;int b = 20;swap01(a, b);  // 调用交换函数cout << "a = " << a << endl;  // 输出main中的acout << "b = " << b << endl;  // 输出main中的b
}

输出结果:

swap01 a = 20
swap01 b = 10
a = 20
b = 10

地址传递:

        在这里我们可以看到swap02(&a,&b);这里分别传入的是a的地址和b的地址,地址传入到*p1和*p2里面。

#include <iostream>
using namespace std;void swap02(int *p1, int *p2)
{int temp = *p1;*p1 = *p2;*p2 = temp;}int main() {int a = 10;int b = 20;//如果是地址传递,可以修饰实参swap02(&a,&b);//相当于将地址传入到上面的函数体cout << "a = " << a << endl;  // 输出main中的acout << "b = " << b << endl;  // 输出main中的b
}

输出结果:

a = 20
b = 10

相关文章:

C++中的指针

一.指针的定义 在C中&#xff0c;指针是一种特殊的变量&#xff0c;它存储另一个变量的内存地址。简单的说&#xff0c;指针是指向另一个数据类型的“指针”或“引用”&#xff0c;我们可以通过指针来间接操作其他变量的值。 指针的基本语法&#xff1a; 数据类型 *指针变量名 …...

拆解微软CEO纳德拉战略蓝图:AI、量子计算、游戏革命如何改写未来规则!

2025年2月19日 知名博主Dwarkesh Patel对话微软CEO萨蒂亚纳德拉 在最新访谈释放重磅信号&#xff1a;AI将掀起工业革命级增长&#xff0c;量子计算突破引爆材料科学革命&#xff0c;游戏引擎进化为世界模拟器。 整个视频梳理出几大核心观点&#xff0c;揭示科技巨头的未来十年…...

智能算法如何优化数字内容体验的个性化推荐效果

内容概要 在数字内容体验的优化过程中&#xff0c;个性化推荐系统的核心价值在于通过数据驱动的技术手段&#xff0c;将用户需求与内容资源进行高效匹配。系统首先基于用户行为轨迹分析&#xff0c;捕捉包括点击频次、停留时长、交互路径等关键指标&#xff0c;形成对用户兴趣…...

MATLAB在数据分析和绘图中的应用:从基础到实践

引言 股票数据分析是金融领域中的重要研究方向&#xff0c;通过对历史价格、成交量等数据的分析&#xff0c;可以帮助投资者更好地理解市场趋势和做出决策。MATLAB作为一种强大的科学计算工具&#xff0c;提供了丰富的数据处理和可视化功能&#xff0c;非常适合用于股票数据的…...

AI客服-接入deepseek大模型到微信(本地部署deepseek集成微信自动收发消息)

1.本地部署 1.1 ollama Ollama软件通过其高度优化的推理引擎和先进的内存管理机制&#xff0c;显著提升了大型语言模型在本地设备上的运行效率。其核心采用了量化技术&#xff08;Quantization&#xff09;以降低模型的计算复杂度和存储需求&#xff0c;同时结合张量并行计算&…...

Host文件没有配置ip解析,导致请求接口速度慢

Linux访问第三方接口速度慢 现象 在测试环境&#xff0c;Linux的服务器中&#xff0c;要访问第三方接口&#xff1b;速度有时快&#xff0c;有时慢。 有时候第一次访问比较慢&#xff0c;第二次访问比较快。第三方人员&#xff0c;排查之后&#xff0c;第三方接口没有问题&am…...

excel导入Mysql中时间格式异常

问题描述&#xff1a; 当使用xls/xlsx/csv导入mysql中&#xff0c;如果列是时间类型比如excel表中显示2024/02/20 09:18:00&#xff0c;导入后时间可能就会变成1900-01-01 09:18:00这样。 问题原因&#xff1a; 这是由于excel表中和数据库中的时间类型不匹配导致。 问题解决…...

vue 判断一个属性值,如果是null或者空字符串或者是空格没有值的情况下,赋值为--

在 Vue 中&#xff0c;可以通过多种方式来判断一个属性值是否为 null、空字符串或者仅包含空格&#xff0c;如果满足这些条件则将其赋值为 --。下面分别介绍在模板和计算属性、方法中实现的具体做法。 1. 在模板中直接判断 如果只需要在模板中对属性值进行显示处理&#xff0c…...

JavaWeb-Tomcat服务器

文章目录 Web服务器存在的意义关于Web服务器软件Tomcat服务器简介安装Tomcat服务器Tomcat服务器源文件解析配置Tomcat的环境变量启动Tomcat服务器一个最简单的webapp(不涉及Java) Web服务器存在的意义 我们之前介绍过Web服务器进行通信的原理, 但是我们当时忘记了一点, 服务器…...

vue语法---样式操作-行内样式

文章目录 直接写死的行内样式v-bind绑定对象(静态样式)对象数组 直接写死的行内样式 <template><div v-bind:style"{color:red}">睡觉</div> </template><script>export default{data() {return {}},methods:{}, mounted(){},} </…...

封装一个echarts的组件

父组件页面 <yyjlchartv-if"showyyjl"chartId"yyjllLine":sourceData"sourceDatayyjl":options"optionsyyjl"></yyjlchart>components: {LineEcharts,yyjlchart: () > import("../yyjlchart"),},data() {re…...

计算机网络安全之一:网络安全概述

1.1 网络安全的内涵 随着计算机和网络技术的迅猛发展和广泛普及&#xff0c;越来越多的企业将经营的各种业务建立在Internet/Intranet环境中。于是&#xff0c;支持E-mail、文件共享、即时消息传送的消息和协作服务器成为当今商业社会中的极重要的IT基础设施。然而&#xff0…...

Linux 性能调优简单指南

一、性能调优概述 Linux 性能调优是系统运维的核心任务之一,目的是通过资源分配、参数优化和瓶颈消除,提升系统运行效率和稳定性。调优需遵循以下原则: 基于数据驱动:使用监控工具精准定位瓶颈分层逐级分析:从硬件到应用的逐层排查变更可回溯:单变量调整并记录结果场景适…...

第十一章: vue2-3 生命周期

创建 挂载 更新 销毁 四个阶段 > 生命周期函数 生命周期钩子  created mounted 创建vue2 的脚手架&#xff1a; vue create vue2_test v-show"isShow" v-if "isShow" 这里的isShow 表示一个函数 let isShow "true" <tem…...

【算法基础】--前缀和

前缀和 一、一维前缀和示例模板[寻找数组的中心下标 ](https://leetcode.cn/problems/tvdfij/description/)除自身以外的数组乘积和可被k整除的子数组 一、一维前缀和 前缀和就是快速求出数组某一个连续区间内所有元素的和。 示例模板 已知一个数组arr&#xff0c;求前缀和 …...

输入搜索、分组展示选项、下拉选取,el-select 实现:即输入关键字检索,返回分组选项,选取跳转到相应内容页 —— VUE 项目-全局模糊检索

后端数据代码写于下一篇&#xff1a;输入搜索、分组展示选项、下拉选取&#xff0c;全局跳转页&#xff0c;el-select 实现 —— 后端数据处理代码&#xff0c;抛砖引玉展思路 【效果图】&#xff1a;分组展示选项 【去界面操作感受一下】—> 便捷简洁的企业官网 【录制效…...

Web入侵实战分析-常见web攻击类应急处置实验2

场景说明 某天运维人员&#xff0c;发现运维的公司站点被黑页&#xff0c;首页标题被篡改&#xff0c;你获得的信息如下&#xff1a; 操作系统&#xff1a;windows server 2008 R2业务&#xff1a;公司官网网站架构&#xff1a;通过phpstudy运行apache mysqlphp开放端口&…...

DeepSeek:AI商业化的新引擎与未来蓝图

摘要 在人工智能迅猛发展的浪潮中&#xff0c;DeepSeek以其卓越的技术实力和高超的商业化能力崭露头角。作为一款现象级AI产品&#xff0c;它不仅在算法性能上位居行业前列&#xff0c;还通过灵活的定制解决方案渗透到金融、医疗、零售等多个领域。DeepSeek以创新的商业模式和场…...

从零开始学习PX4源码9(部署px4源码到gitee)

目录 文章目录 目录摘要1.gitee上创建仓库1.1 gitee上创建仓库PX4代码仓库1.2 gitee上创建子仓库2.固件在gitee部署过程2.1下载固件到本地2.2切换本地分支2.3修改.gitmodules内容2.4同步子模块仓库地址2.5同步子模块仓库地址更新(下载)子模块3.一级子模块和二级子模块的映射关…...

wps中zotero插件消失,解决每次都需要重新开问题

参考 查看zotero目录 D:\zotero\integration\word-for-windows 加载项点击 dotm即可 长期解决 把dom 复制到 C:\Users\89735\AppData\Roaming\kingsoft\office6\templates\wps\zh_CN还是每次都需要重新开的话 重新加载一下...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...