【C Prime Plus】学习笔记,Chapter 10,用const 修饰形参 保护数据,以防修改

如何处理动态语言(Python / JS)的“隐形”调用链? 本文揭示动态语言(Python/JS)中静态AST解析导致调用链“断链”的核心问题,提出通过运行时追踪补全图谱的解决方案。基于Code-Graph-RAG的cgr trace机制,分别利用pytest插件与V8 Profiler捕获真实调用路径,将动态边合并至静态图谱,并在权重体系中提升动态边优先级。实践表明,该方法可显著提升图谱覆盖率,实现“结构+行为”双视角理解代码,为MCP与Rerank系统提供可靠支持。 阅读详情

// Page 674
// 保护数组,防止传给形参时被修改

// 如果要改变实参数组的元素值,就如下定义
void add_to(double ar[],int n,double val)
{
	int i;
	for(i=0;i<n;i++)
		ar[i]+=val;
}

// 如果不希望实参数组被改变,就用 const 修饰 形参定义
// 这个const 在形参中出现,并不要求调用时传入的实参也是const

int sum(const int ar[],int n)
{
	int i;
	int total=0;
	for(i=0;i<n;i++)
		total +=ar[i];
	return total;

}

// 常量指针 和 指针常量 的问题,这2个名称容易混淆了,外文翻译过来的东西,又不是保留字,
// 个人爱怎么解读是自己的事,老考这个实在太恶心了.还是去用和去记英文安逸(const double *pd  和 double* const pd)
// 常量指针: 因为指针保存的是地址,常量嘛就是不变的意思,所以,可以解读为,地址不变的指针.咋的了,不行么? 
// 指针常量: 可以解读为 指向常量的指针,被指向的东西是常量....
// 这个问题实在是恶心.

// 所谓的正解是
// 常量指针: 指向常量的指针  const double *pd;  内容不可变,地址可变
// 指针常量: 指针是个常量    double* const pd;  地址不可变,内容可变 
                     (指针常量 可以这样写么? doulbe const *pd;  测试了表明也可以,但是实际是常量指针, 等同于const double *pd;
					  也就是  const double *pd; 与 doulbe const *pd; 等同,奇怪.)


// 申明2个函数如下
 void show_array(const double ar[],int n);         //不会改变数组的值
 void mult_array(double ar[],int n,doubnle mult);  // 会改变数组的值
  //......


 More about const:

1) use const to create symbolic constants
	const double pi=3.14; // 可以用 #define pi 3.14

2) use const to create constant arrays,constant pointers,and pointers to constant.
#define MONTHS 12
const int days[MONTHS]={31,28,31,30,31,30,31,31,30,31,30,31};
days[9]=44; // 编译错误,不可以改变常量的值

...
double rates[5]={88.99,100.12,59.45,183.11,1340.5};

//  下面,这就是所谓的常量指针,就是指向常量的指针.  内容不可变,地址可变.
const double *pd = rates; // pointer to constant,数组名rates 是个地址常量.
*pd = 29.88; // not allowed
pd[2] = 222.22; // not  allowed
rates[0]=99.99 // allowed becasue rates is not const
pd++; // make pd point to rates[1]--allowed , 操作指针本身又可以


pointer-to-constant :常量指针通常用做函数的形参,表示使用该pointer不会改变实参的值
void show_array(const double *ar,int n);

若干使用小结:

1.  pointer-to-constant : 这种指针只能用于修改地址,而不可以修改内容
 允许 把常量数据或者非常量数据的地址赋予 pointer-to-constant(常量指针)
double rates[5]={88.99,100.12,59.45,183.11,1340.5};
const double locked[4]={0.08,0.07,0.06,0.05};
const double *pd=rate;  // const 限定的变量在定义的时候必须初始化,这条语句不可以分开写.

pd=locked;		//valid
pd=&rates[2];	//valid
show_array(rates,5); //valid
show_array(locked,4)  //valid

2. constant pointer :  这种指针只能用于修改内容,不能修改地址
double rates[5]={88.99,100.12,59.45,183.11,1340.5};
double * const pd=rates; 	// valid, 因为 rates 是个地址常量

pd=&rates[1];  //  not allowed
*pd= 99.00     //  valid  ,虽然地址不可变,但是内容是可以变的


3. 使用2次 const 创建的指针,既不能修改地址(初始化后)也不能修改内容

double rates[5]={88.99,100.12,59.45,183.11,1340.5};
const double * const pd =rates;	// valid, 因为 rates 是个地址常量
pd=&rates[1];  //  not allowed
*pd= 99.00     // not allowed


 

从Applied Intelligence被拒到The Visual Computer录用:我的计算机视觉论文投稿时间线全记录(含详细修改意见) 本文详细记录了作者从Applied Intelligence被拒到The Visual Computer成功发表计算机视觉论文的全过程,重点分享了如何将模糊的拒稿理由转化为具体改进方案。文章包含技术改进细节、写作调整策略以及期刊选择经验,为计算机视觉领域的研究者提供了实用的投稿指南。 阅读详情

相关推荐

信息收集-服务器信息

服务器上面可以运行大量的系统服务和第三方应用服务,如果操作系统或者第三方软件没有及时升级打补丁,攻击者就有可能直接通过服务器上运行的服务进行攻击。

weixin_49349476的博客 1446

关于const的三类指针

1.指向const的指针double rates[5] = {88.99, 100.12, 59.45, 183.11, 340.5}; const double * pd = rates;要点需知:指向const的指针pd,不能通过使用指针pd来更改它所指向的值,但是可以更改pd的指向。示例如下:*pd = 29.89;//不允许(通过指针pd改变所指向的值了) pd[2] = 222.22;//

hjy517744152的博客 498

STM32使用 jansson 处理 Json格式字符

STM32 Json 字符的创建和解析1、Json简介2、jansson库的下载安装和报错解决2.1、下载安装2.2、STM32工程文件中导入jansson库2.3、报错解决2.4、修改堆栈空间3、Json 字符的创建4、Json 字符的解析4.1 纯键值对4.2、键的值是一个对象4.3、键的值是一个数组   STM32处理json字符串一般不常见,大部分都是不需要处理的数据,但是在一些通信中需要处理上传或者下传的数据,就别比如在物联网中,有一部分数据就是以json格式传输的,那么就需要对数据经行解析。我简

青烨慕容 7420

C++ Primer的课后规划问题的第八章

1.写通常需要一个参数(字符串的地址)。字符串和打印功能。只要。假设提供了第二个参数(int种类),而这个参数不0,的次数的函数打印串数量为该功能将被称为(意,字符串的打印次数不等于第二个參数的值。而等于函数被调用的次数)。是的,这是一个很可笑的函数。但它让读者可以使用本章介绍的一些技术。在一个简单的程序中使用该函数。以演示该函数是怎样工作的。 代码: #include&lt;iost...

weixin_34148340的博客 159

GNSS - PPP软件 - GAMP 在VS2019/2022下完成调试、跑通程序(超详细!)

WIN32;_DEBUG;_CONSOLE;O_WARNINGS;ENAGLO;ENACMP;ENAGAL;ENAQZS;NFREQ=3。

qq_43381998的博客 8251

【MFiX后处理】MFiX中使用des_usr_var输出颗粒的传热量(2020-11-27更新变更输出变量名方法)

参考之前Yin的那一篇博客 https://www.cnblogs.com/Jay-CFD/p/10621274.html 输出一下颗粒传热量 使用的算例是fluid_bed_dem_2d 打开des scalar tracking 前面都和Yin那篇一样,打开enable user scalar tracking 输入2 因为第一个用来测试Y加速度了 第二个输出传热量 然后在output vtk中勾选好 更改源代码 源代码为des_thermo_newvalues.f 在mfix-GUI自带的ed

beidou111的博客 1533

C语言指针详解

C语言指针详解

qqp1455755691的博客 665

FPGA实现DDR接口

verilog// DDR2控制器状态机// 初始化序列// 发出初始化命令endendendend// 自动预充电end// 其他状态...endcaseendend。

whm128的博客 1001

C语言--const和指针

const数组、const指针和指向const的指针。const数组#define MONTHS 12 ... const int days[MONTHS] = {31,28,31,30,31,30,31,31,30,31,30,31};如果程序稍后尝试改变数组元素的值,编译器将生成一个编译期错误消息:days[9] = 44;   /* 编译错误 */指向const的指针指向const的指针不能用

super_ozman的专栏 591

揭秘CAS:深入理解与应用解析

在并发编程中,Compare-And-Swap(CAS)机制作为一种无锁算法,凭借其高效性和避免线程阻塞的优势,受到广泛关注。CAS不仅在底层实现上有着重要地位,还在实际开发中发挥着关键作用。本文将从CAS的工作原理、在Java中的实现及其增强机制来回顾和加深理解一下CAS。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 85万+

重回童年的经典系列☀️|【炸弹人小游戏】制作过程+解析 | 收藏起来跟曾经的小伙伴一起梦回童年!

Unity,小游戏开发。 本篇文章对童年经典小游戏——炸弹超人进行制作和解析。不知道有没有勾起你童年的回忆呢!快来和我一起制作这个童年经典的小游戏吧! 敬请品尝!

努力前行,总会成为自己心中的那道光 13万+

从瀑布到流水线:DevOps 入门与 GitLab + Jenkins + Docker 落地实践

先看清软件开发生命周期(SDLC)的全貌,再对比瀑布模型与敏捷开发,随后进入持续集成与 CI/CD 的机制内核;最后落到实操——在 GitLab、Jenkins、Docker 组成的四机实验环境里,走完源码托管、自动化构建、镜像封装与远程部署,直到参数化构建与版本回滚。概念与命令并重,既是入门地图,也是操作手册。

年轻的时候很穷,经过我多年的努力,终于不再年轻。 302

诊断测试工具CANoe.DiVa从入门到精通系列——开门见山

### 工具主要用于测试ECU的诊断功能。关于自动化诊断测试可以分为如下内容: ### -> 1、根据诊断需求规范进行cdd文件的编辑(现阶段主要是诊断问卷调查表); ### -> 2、新建Diva工程,导入对应的诊断数据库文件生成测试用例; ### -> 3、新建CANoe工程,导入CANoe.DiVa生成的Diva工程; ### -> 4、根据测试报告进行错误处理。

Soly_kun的博客 3555

模型之外的那套装置:用 AI harness 完成一个三端同步应用

AI harness 指模型之外、让模型能持续产出可交付软件的全部工程装置。本文把它称作"支架"。它由五层构成:输入层规定模型读什么,反馈层规定模型怎么知道自己错了,观测层把界面与设备状态变成可读事实,记忆层让跨会话不失真,边界层规定哪些动作不许模型自行作出。支架的价值在六天里可以直接计量。

Leo的Matrix 167

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【LTE L3 笔记 09】LTE物理信道-PRACH

课程来源:B站《【2022】华为HCIA-LTE无线工程师认证学习中级视频》笔记为个人整理,含课件截图,仅供学习交流。

lyouhuan的博客 190

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

密码存储不是 MD5 加盐:PBKDF2、scrypt、参数升级与安全验证实战

本文通过实战演示密码存储的正确做法:摒弃MD5加盐,采用PBKDF2与scrypt等高成本密钥派生函数,结合随机盐、版本化记录与严格解析,确保离线破解成本可控。模块实现安全验证、参数校验、透明升级与统一错误处理,强调算法选择需兼顾安全性与可维护性,提供教学级密码存储方案,助力构建可迁移、可审计的认证边界。

此人很懒,什么都没有写~~ 237

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

DNS 不是把域名翻译成 IP:递归解析、TTL 缓存、CNAME 与报文排错实战

本文通过离线Python实验,拆解DNS递归解析、缓存机制与报文结构,揭示“DNS不是全局映射表”的本质。重点解析递归器角色、TTL衰减、CNAME链处理、负缓存隔离及修改记录延迟生效等核心问题,结合实战排错案例,阐明缓存层级、事务匹配、截断处理与安全边界,强调从应用到权威的逐层排查逻辑,实现可复现、可验证的DNS教学系统。

此人很懒,什么都没有写~~ 351

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 148

软件测试用例模板怎么写:从用例设计到执行记录的全套指南

测试用例是测试工作的核心产出,它决定测试覆盖了多少、漏掉了什么。但大多数人的测试用例写得像流水账——只有正常路径,没有异常场景;只有操作步骤,没有预期结果;只有功能测试,没有非功能测试。本文拆解测试用例的标准结构,说明每个字段的含义和写法,给出覆盖功能测试、性能测试、安全测试的完整用例范例,并列出测试用例设计的五个高频遗漏点。

wuwangzhiduoshao的博客 152

附录一源码阅读路线与断点索引

本索引固定于Boot 3.5.7与Framework 6.2.12。先选择要解释的现象,再打开对应源码。表中观察对象是逻辑名称,不保证在所有重载中都是同名局部变量。抽象接口和注解用于阅读契约,不提供可执行方法体断点。

weixin_45476869的博客 161

MCP实战06:传输实战、测试与部署

你的 MCP Server 写完了,怎么确认它真的能被宿主正确调用?这课给传输层实战三件套:MCP Inspector 可视化调试、协议级自动化测试(pytest 断言 JSON-RPC 报文结构)、stdio/HTTP 双传输部署。测试不是可选项——工具描述错一个字段宿主就调不对,你能给 Server 建起自己的回归测试。

Blockbuster-drug 778

【鸿蒙专题与实战】测试体系:单元测试、组件测试与 UI 测试

本文系统讲解鸿蒙开发中的三层测试实践:底层单元测试(用Hypium框架,优先覆盖纯函数、边界与异常)、中层ViewModel逻辑、顶层仅测3-5条关键UI路径。强调测试应“越往下写得越多”,因单元测试快且成本低,而UI测试慢易出错。通过实例说明断言拆分提升定位效率,结合覆盖率报告(hvigorwtest --coverage)发现盲区,核心是“用覆盖率找漏测,而非追求数字”。附五步落地清单:建测试文件、按优先级补用例、精简UI测试、生成报告、定位未覆盖行。下一篇将开启实战项目:从需求到上架全流程。

信息安全领域优质创作者|操作系统领域专家 188

【LTE L3 笔记 05】LTE同步信号

课程来源:B站《【2022】华为HCIA-LTE无线工程师认证学习中级视频》笔记为个人整理,含课件截图,仅供学习交流。

lyouhuan的博客 116

大型高复杂度互联网项目管理经验心得

复杂项目,管理的核心不是管人,而是管理依赖和变更简单项目重点是排任务、盯进度;多端多关联系统的大型项目,大部分延期、故障根源都来自依赖失控、变更失控。项目经理首要工作是把看不见的依赖显性化,把随意变更变成受控变更,而不是单纯催开发进度。分批上线不是降低标准,而是拆分风险,小步可控很多人觉得分批上线麻烦,希望攒到一起发布。但集中上线会把所有风险集中在同一个窗口,一旦出问题,排查范围巨大、影响面广。分批发布本质是风险隔离,每一批只承载有限的变更,出问题更容易定位、回滚、止损。

zyx980193917的博客 189

电芯串并联与BMS保护

串联升压、并联扩容,规则一句话,但整包能用多少由最弱的那节电芯说了算。这篇先算最弱电芯的账,再讲清三层保护,最后给对应的BMS测试用例:欠压、压差、均衡怎么测。BMS项目里有个常见场面:两台同配置的样车,电芯是同一批的,跑出来续航和限功率点却对不上。拆包量单体,一台里有一节电芯的容量比其他低了8%。整包表现被一节拖住,就是串并联的规矩在起作用。这篇先把规则和算例讲清,再讲保护分层,最后落到测试用例。

qq_43241255的博客 232

工作流 vs 自主 Agent:5 种设计模式与 3 种建模方式详解

本文基于 Anthropic《Building Effective Agents》指南,系统梳理了AI应用中的两类核心架构:Workflow(编排式)与Agent(自主智能体)。强调“能画流程图就不上Agent”,提出从简单提示链到复杂自主决策的5种可组合工作流模式,并给出选型口诀与工程实践建议。核心观点:优先用确定性、可审计的Workflow,仅在任务路径未知时启用Agent,避免盲目复杂化。

分享大数据、java相关的技术 179
上一篇: 【C Prime Plus】学习笔记,Chapter 10,数组和指针之五
下一篇: 【C Prime Plus】学习笔记,Chapter 10,数组初始化问题
sergery
博客等级 码龄18年 113粉丝 136原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值