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

高考数学97分,我的“数学直觉“比140分更好用:指针:内存的门牌号系统

目录一.序言二.数学直觉三.核心概念1.基础核心概念1. 1.指针的本质1.2. 指针的两大核心操作1.3. 指针的类型2.进阶核心概念2.1. 指针与数组的关系2.2. 指针的运算2. 3. 多级指针3.应用核心概念3.1. 指针作为函数参数3.2. 动态内存分配3.3. 函数指针4.安全核心概念4.1. 空指针NULL4.2. 野指针与悬空指针4.3. 内存泄漏四.代码实现1. 指针基础操作2. 数组与指针3. 指针作为函数参数4. 动态内存分配5. 函数指针6. 多级指针五.最后总结一.序言大家好我是你们的小洛。上一章我们讲了模块化封装的函数这一节我们首先要知道的一个就是系统通过管理内存来实现对变量的操作而变量只是内存的代言人。既然变量只是内存的代言人那我们如何绕过这个代言人直接拿到内存的门牌号来操作呢二.数学直觉首先我们要理解系统再找变量的核心就是地址系统识别不了变量名他只能识别地址变量名就像别人给你取的外号所以通过变量名映射地址系统通过地址来进行操作这个量。如果我们把我们自己当做是一个系统把学校的教学楼当做是一个程序那么每一间教室就是内存空间每一个门牌号就是这个内存的编号指针就是这个这个编号我们在用到一个东西时我们可以直接根据门牌号指针找这个教室去这个教室找东西我们也可以用指针变量先找到这间教室的门牌号指针再去根据门牌号找这个教室。三.核心概念1.基础核心概念1. 1.指针的本质指针就是内存地址指针变量就是存储地址的变量。1.2. 指针的两大核心操作取地址 获取变量的内存地址取值* 通过地址访问或修改数据与互为逆运算*p得到的是p指向的值而非p本身1.3. 指针的类型指针类型决定了解引用时访问的内存大小int* 访问4字节 char* 访问1字节2.进阶核心概念2.1. 指针与数组的关系数组名在表达式中通常退化为指向首元素的指针但sizeof(arr)时仍是数组类型arr[i] 等价于 *(arr i)2.2. 指针的运算指针加减根据类型大小偏移地址指针比较比较地址的大小关系2. 3. 多级指针指向指针的指针 int** p 用于间接修改指针本身的值3.应用核心概念3.1. 指针作为函数参数实现传引用效果修改外部变量避免大数据的复制提高效率3.2. 动态内存分配malloc 分配堆内存返回指针通过指针管理动态内存的生命周期3.3. 函数指针指向函数的指针存储函数的入口地址实现回调函数和动态调用4.安全核心概念4.1. 空指针NULL不指向任何有效内存的指针使用前应检查避免程序崩溃4.2. 野指针与悬空指针野指针指向未分配或已释放的内存悬空指针原指向的内存已释放但指针仍保存旧地址4.3. 内存泄漏动态分配的内存未释放导致内存资源浪费四.代码实现1. 指针基础操作#include stdio.h int main() { int a 10; int* p a; // 取地址 printf(a的值: %d\n, a); printf(a的地址: %p\n, a); printf(p的值: %p\n, p); printf(*p的值: %d\n, *p); // 解引用 *p 20; // 通过指针修改a的值 printf(修改后a的值: %d\n, a); return 0; } //a的值: 10 //a的地址: 0x7ffee6b1e76c //p的值: 0x7ffee6b1e76c //*p的值: 10 //修改后a的值: 202. 数组与指针#include stdio.h int main() { int arr[5] {1, 2, 3, 4, 5}; int* p arr; // 数组名是首元素地址 printf(数组元素: ); for(int i 0; i 5; i) { printf(%d , *(p i)); // 指针偏移访问 } printf(\n); printf(数组元素: ); for(int i 0; i 5; i) { printf(%d , p[i]); // 指针下标访问 } printf(\n); return 0; } //数组元素: 1 2 3 4 5 //数组元素: 1 2 3 4 53. 指针作为函数参数#include stdio.h // 通过指针修改外部变量 void swap(int* a, int* b) { int temp *a; *a *b; *b temp; } int main() { int x 10, y 20; printf(交换前: x%d, y%d\n, x, y); swap(x, y); printf(交换后: x%d, y%d\n, x, y); return 0; } //交换前: x10, y20 //交换后: x20, y104. 动态内存分配#include stdio.h #include stdlib.h int main() { int n; printf(请输入数组大小: ); scanf(%d, n); // 动态分配内存 int* arr (int*)malloc(n * sizeof(int)); if(arr NULL) { printf(内存分配失败\n); return 1; } // 填充数据 for(int i 0; i n; i) { arr[i] i 1; } // 输出数据 printf(动态数组: ); for(int i 0; i n; i) { printf(%d , arr[i]); } printf(\n); // 释放内存 free(arr); return 0; } //请输入数组大小: 5 //动态数组: 1 2 3 4 55. 函数指针#include stdio.h // 加法函数 int add(int a, int b) { return a b; } // 乘法函数 int multiply(int a, int b) { return a * b; } int main() { // 函数指针 int (*operation)(int, int); // 指向加法函数 operation add; printf(3 5 %d\n, operation(3, 5)); // 指向乘法函数 operation multiply; printf(3 * 5 %d\n, operation(3, 5)); return 0; } //3 5 8 //3 * 5 156. 多级指针#include stdio.h void modify_pointer(int** pp) { static int b 200; *pp b; // 修改指针p本身 } int main() { int a 100; int* p a; printf(修改前: *p %d\n, *p); modify_pointer(p); // 传递指针的地址 printf(修改后: *p %d\n, *p); return 0; } //修改前: *p 100 //修改后: *p 200五.最后总结总的来说指针就是这个内存的地址名指针变量就是用来存放指针的。通过指针直接操作内存就像直接修改游戏后台数据一样比通过变量操作更加灵活可以实现更多自定义功能实现常规操作难以达到的效果。下节预告自定义数据类型打包与复用

相关文章:

高考数学97分,我的“数学直觉“比140分更好用:指针:内存的门牌号系统

目录 一.序言 二.数学直觉 三.核心概念 1.基础核心概念 1. 1.指针的本质 1.2. 指针的两大核心操作 1.3. 指针的类型 2.进阶核心概念 2.1. 指针与数组的关系 2.2. 指针的运算 2. 3. 多级指针 3.应用核心概念 3.1. 指针作为函数参数 3.2. 动态内存分配 3.3. 函数指针 4.安…...

JAVA学习day01记录day01

为了未来能跟上AI的时代,只能老骥伏枥,重返学海。 那就从java基础班开始吧。今天学习涵了Java开发的基础搭建与入门实践。 很荣幸能成为黑马程序员的广州何波校长的学生,也很幸运能在他亲自上课的班级学习,何校长幽默,…...

全屋智能不被 “网” 住[特殊字符] Home Assistant+cpolar 解锁远程控家新体验

Home Assistant 是一款专注本地控制的智能家居管理平台,能整合米家、vivo、飞利浦等多品牌设备,通过可视化界面设置 “开门开灯”“离家关插座” 等自动化场景,无需编写代码,就能让不同品牌的智能设备实现联动,摆脱多个…...

修仙游戏:C++实现修真世界

以下是一个整合了修仙元素的C小游戏框架&#xff0c;包含功法系统、丹药炼制、境界突破和地图系统。代码超过300行&#xff0c;可直接编译运行&#xff1a;#include <iostream> #include <vector> #include <map> #include <string> #include <cstd…...

大数据实时计算:Flink+AI 融合实战

一、为什么需要 FlinkAI 融合&#xff1f; 在大数据实时计算场景中&#xff0c;传统的Flink作业往往只负责数据清洗、聚合、流转等标准化处理&#xff0c;但业务需求早已不满足于"计算出结果"&#xff0c;而是需要"从结果中产生智能决策"&#xff1a; 电…...

GeoDa 空间回归分析

GeoDa 空间回归分析 前置知识&#xff1a;[[GeoDa空间自相关分析]] 难度等级&#xff1a;⭐⭐⭐⭐⭐ 更新日期&#xff1a;2026-03-16 &#x1f4cb; 目录 1. 空间回归基础2. 空间滞后模型&#xff08;SLM&#xff09;3. 空间误差模型&#xff08;SEM&#xff09;4. 空间杜宾模…...

初探 MindSpore(一):PyTorch 用户先从哪里开始

初探 MindSpore&#xff08;一&#xff09;&#xff1a;先建立最基本的框架认识 对 PyTorch 用户来说&#xff0c;MindSpore 不是一套需要从头理解的框架&#xff0c;但也绝不是“把 API 名字改掉就能迁过去”的另一层皮。MindSpore 官方文档本身就是按这个思路组织的&#xff…...

OpenClaw 安全公告激增暴露 GitHub 与 CVE 漏洞跟踪体系间的鸿沟

自托管AI Agent项目OpenClaw在发布数周后便成为GitHub星标最多的代码库,吸引了大量开发者社区和研究人员关注。但没人预料到,其快速增长很快成为全球漏洞跟踪体系的意外压力测试。 安全公告爆发式增长 2月下旬,该项目开始以开源项目罕见的速度发布安全公告,迅速暴露出两大…...

申论素材资源合集

26行政执法专项资料 文件大小: 31.8GB内容特色: 31.8GB行政执法专项资料&#xff0c;覆盖法规、案例与高频考点适用人群: 备考公务员行政执法岗、法检书记员、执法勤务辅警核心价值: 一站式掌握执法依据、程序与高频考题&#xff0c;快速提升应试能力下载链接: https://pan.qu…...

openclaw运维

这里写目录标题常用命令配置管理更新管理斜杠命令常用命令 #### Gateway 管理 # 启动 Gateway openclaw gateway# 启动并显示详细日志 openclaw gateway --verbose# 指定端口启动 openclaw gateway --port 18789配置管理 # 运行配置向导 openclaw onboard# 系统健康检查 open…...

[连载] C++ 零基础入门-5.C++ if else 条件判断(小白必看)

【C 零基础入门】第5篇&#xff1a;if else 条件判断&#xff08;小白必看&#xff09; 作者&#xff1a;咏方舟-长江支流 | 日期&#xff1a;2026-03-16 ✅ 标准C跨平台说明 本系列免费&#xff0c;敬请关注&#xff01;所有代码均采用标准C&#xff0c;不依赖任何平台…...

Gemini 3 flash架构深度拆解:从稀疏MoE到原生多模态的工程实现

Gemini 3 Pro是谷歌于2025年11月发布的旗舰级大语言模型&#xff0c;其技术内核远非“参数更大”所能概括——稀疏专家混合&#xff08;MoE&#xff09;架构、原生多模态统一语义空间、可配置思考深度与思维签名机制&#xff0c;共同构成了其性能跃迁的底层逻辑。国内技术爱好者…...

PD协议物理层深度解析:SOP在充电中的关键作用

近日&#xff0c;有大师级人物成功完成了PD快充的Only Source端软件开发&#xff0c;这一庞大工程目前展现出良好的兼容性&#xff0c;经过测试的笔记本和手机均无异常。 在技术细节上&#xff0c;他采用了ZR的SW3526 buck芯片、安森美的FUSB302物理层芯片&#xff0c;并辅以ST…...

Camera ISP 之 镜头阴影矫正(lens_shading_correction)

1、Lens Shading Lens Shading指画面四角由于入射光线不足形成暗角&#xff0c;同时由于不同频率的光折射率不同&#xff0c;导致Color Shading&#xff0c;因此需要进行镜头阴影矫正&#xff08;Lens Shading Correction) 。 Lens shading分为两种 luma shading和color shadi…...

一区级光伏功率预测创新模型!CEEMDAN-KPCA-PINN多变量时序预测!完全自适应噪声集合经验模态分解+核主成份降维+物理信息神经网络

SCI配图创新模型&#xff01;完全自适应噪声集合经验模态分解核主成份降维物理信息神经网络&#xff01;CEEMDAN-KPCA-PINN多变量时序光伏功率预测&#xff0c;MATLAB代码。以下是对代码的全面分析&#xff1a; 一、主要功能 该代码用于光伏功率时间序列预测&#xff0c;结合了…...

在 CentOS Stream 9 上部署 OpenClaw(小龙虾)

在 CentOS Stream 9 上部署 OpenClaw&#xff08;小龙虾&#xff09; 注意&#xff1a;本人使用的普通用户安装 环境准备 # 1. 更新系统 sudo dnf update -y# 2. 安装基础工具 sudo dnf install -y gcc-c make cmake git curl wget vim执行官方安装脚本 脚本会自动安装 Node.js…...

C# 语言测验

C# 语言测验 引言 C#(读作“C sharp”)是一种由微软开发的高级编程语言,它旨在提供跨平台的开发能力,并广泛应用于桌面应用、移动应用、Web应用以及云服务等领域。为了帮助读者更好地理解和掌握C#语言,本文将提供一份全面的C#语言测验,旨在检验读者对C#基础知识的掌握程…...

迅雷怎么加快下载速度_现在迅雷下载怎么这么慢

迅雷限速怎么破解这个很简单&#xff0c;这个方法我还是在我朋友那里找到的。下载速度也是非常可以的。我让大家看一下。点我打开方法 这个就是我测试的速度。速度基本能跑到10M左右。宽带问题。下面开始今天的教学环节 打开上面图片中的地址&#xff0c;你会看到一个获取文件列…...

前端面试基础知识整理【Day-11】

前言 前端面试基础知识整理【Day-1】-CSDN博客 前端面试基础知识整理【Day-2】-CSDN博客 前端面试基础知识整理【Day-3】-CSDN博客 前端面试基础知识整理【Day-4】-CSDN博客 前端面试基础知识整理【Day-5】-CSDN博客 前端面试基础知识整理【Day-6】-CSDN博客 前端面试基…...

前端实现网页转PDF矢量文件,高清还原网页内容

前端&#xff1a;Vue3 后端&#xff1a;Node.js Express 接口 核心 PDF 引擎&#xff1a;Puppeteer&#xff08;谷歌 Chrome 官方无头浏览器&#xff09; 中文 100% 不乱码 图片 100% 显示 样式 1:1 还原 A4 自动分页&#xff0c;完美排版 文字可选中&#xff0c;矢量高清 ✅ …...

网络安全的进一步学习

了解基础网安知识分析第三方应用&#xff0c;进一步了解向日葵低版本被利用的条件&#xff0c;和木马能隐藏的原因&#xff08;通过计划任务定时运行实现持久化的运行&#xff09;和发现异常登录的记录并进行排查。...

JavaScript性能优化实战烈嘿

JavaScript性能优化实战技术文章大纲 性能优化的核心原则 减少代码执行时间 降低内存占用 优化网络请求 提升用户体验 代码层面的优化 避免全局变量污染&#xff0c;使用模块化或闭包 减少DOM操作&#xff0c;批量更新或使用文档片段 使用事件委托减少事件监听器数量 优化循环结…...

木马的排除与防护

作为学习者&#xff0c;我仅将所学知识进行系统梳理和总结。如有任何疏漏或错误&#xff0c;敬请指正进程、服务、启动项、计划任务的定义进程&#xff1a;操作系统中程序的一次执行实例&#xff0c;是资源分配和调度的基本单位。 服务&#xff1a;在后台运行的程序&#xff0c…...

我用 OpenClaw 7 天,砍掉了 80% 的重复沟通

我用 OpenClaw 7 天&#xff0c;砍掉了 80% 的重复沟通 很多人第一次接触 AI 助手&#xff0c;期待的是“无所不能”。 但真正把 AI 用起来之后&#xff0c;你会发现&#xff0c;最先产生价值的不是那些酷炫能力&#xff0c;而是那些你早就烦透了、却每天都还得做的重复工作。 …...

IDEA各版本支持的Java 版本和功能

https://www.jetbrains.com.cn/help/idea/supported-java-versions.html...

2.【.NET10 实战--孢子记账--产品智能化】--升级前的准备工作:项目依赖梳理与升级计划制定

我们在日常产品维护时&#xff0c;往往会遇到底层基础框架需要升级的情况&#xff0c;尤其是当底层框架升级到一个新的大版本时&#xff0c;可能会带来一些不兼容的变更&#xff0c;这时候我们就需要做好充分的准备工作&#xff0c;以确保升级过程顺利进行。从本文开始&#xf…...

064远程教育网站系统-springboot+vue

文末领取项目源码springbootvue 1.登录2.注册3.首页请文末卡片dd我获取源码...

Android 多进程开发 - FileDescriptor、Uri、AIDL 接口定义不能抛出异常

FileDescriptor 1、AIDL IMyAidlInterface.aidl&#xff0c;这里是位于 src/main/java/com/my/common 包下 package com.my.common;import android.os.ParcelFileDescriptor;interface IMyAidlInterface {ParcelFileDescriptor getFileDescriptor();void setFileDescriptor(in …...

KMP算法详解 [c++]

目录 前言 朴素的模式匹配算法 KMP模式匹配算法 KMP模式匹配算法的原理 next数组值的推导 KMP模式匹配算法的实现 KMP模式匹配算法的改进 nextval的推导 优化后的KMP模式匹配算法代码 零、前言 每年新闻周刊都会发布年度十大热词&#xff0c;这其实查询某个字符串在其…...

AD7685的SPI接口调试过程(附完整代码)

该系列的ADC主要差别是在转换速率上&#xff0c;AD7685的最大转换速率是250kSPS。我们主要是看芯片SPI接口和主机的通信&#xff1a;单个ADC和兼容SPI接口的主机通信时&#xff0c;一般会用三线且无繁忙指示模式&#xff0c;该模式的时序图如下所示&#xff1a;主要注意以下几点…...