彻底搞懂值传递、引用传递与地址传递:从概念到实战避坑指南
1. 项目概述从一次“诡异”的Bug说起那天下午我正喝着咖啡同事小张一脸困惑地跑过来指着屏幕上的代码问我“哥你看这段代码我明明在函数里修改了这个对象为什么外面打印出来还是老样子不是说Python里对象都是引用传递吗”我凑过去一看是一个典型的列表操作问题。这已经不是第一次了几乎每隔一段时间就会有新手甚至是有一定经验的开发者在“值传递”、“引用传递”这些概念上栽跟头写出一些看似合理但结果却出人意料的代码。“彻底搞懂值传递、地址传递、引用传递”这几乎是每个程序员成长路上必须翻越的一座小山丘。它不像学习一个框架那样立竿见影但却是理解程序底层行为、编写出健壮且符合预期代码的基石。很多编程语言教程和面试题都会涉及但往往解释得过于抽象或者只针对单一语言导致大家脑子里混杂着C、Java、Python的各种说法越学越糊涂。这篇文章我就想用最直白的方式结合多种主流语言的例子把这三个概念掰开揉碎了讲清楚。我们不只停留在“是什么”更要深挖“为什么”会这样设计以及在实际编码中如何避免常见的坑。无论你是刚入门的新手还是想重新梳理这部分知识的老手相信都能从这里获得清晰的认知和实用的技巧。毕竟搞懂了数据在函数间“旅行”的规则你才能成为代码真正的“导演”而不是被意外结果牵着鼻子走的“观众”。2. 核心概念拆解拨开术语的迷雾在深入细节之前我们必须先统一认识澄清几个最容易混淆的术语。网络上关于“传递方式”的争论很多很大程度上是因为大家用的词一样但指代的内涵却不同。2.1 值传递最“老实”的复制行为值传递是所有传递方式中最容易理解的一种。它的核心动作就一个字“复制”。当调用一个函数并把一个变量作为参数传入时如果采用值传递的方式那么函数内部会创建这个参数的一个全新副本。这个副本和原来的变量我们称之为“实参”拥有相同的值但它们在内存中是两个完全独立的实体拥有不同的内存地址。你可以把它想象成复印一份文件。你把原文件实参交给复印机函数调用过程得到一份复印件形参。你在复印件上做任何涂改、批注都不会影响到原来的那份文件。同样在函数内部对形参的任何修改都只作用于那个副本函数执行完毕后副本被销毁而原来的实参毫发无损。这是C语言中对于基本类型如int,char,float的默认行为也是很多语言在处理基础数据类型时的做法。它的优点是安全函数不会意外修改外部的数据缺点则是如果传递的数据结构很大比如一个庞大的结构体复制整个副本会产生性能开销。2.2 地址传递把“家门牌号”告诉函数地址传递是值传递的一种特殊形式常见于C/C中。它传递的不是数据本身而是数据所在内存位置的地址也就是指针。继续用比喻来说值传递是复印了整个文件而地址传递是只写了一张纸条上面写着“文件在A柜子第三层”。你把这张纸条地址传给函数。函数拿到纸条后可以根据上面的地址直接找到原文件所在的位置并进行修改。因为操作的是原始文件所以函数内的修改会直接反映到外部。在C语言中当你传递一个变量的指针时就是在进行地址传递。函数内部的形参是一个指针变量它存储了外部实参的地址通过解引用操作*就能直接操作原数据。void modify(int *ptr) { *ptr 100; // 通过地址直接修改原变量的值 } int main() { int a 10; modify(a); // 传递变量a的地址 printf(%d\n, a); // 输出 100 return 0; }这里的关键在于传递的“地址”本身是以值传递的方式复制给形参指针的。也就是说指针变量ptr是a的一个副本它们保存着相同的地址值。但通过这个相同的地址就能找到并操作同一块内存。2.3 引用传递给变量起个“函数内的小名”引用传递是C引入的一种机制它提供了一种比指针更安全、更直观的间接访问方式。你可以把引用理解为变量的一个“别名”。在引用传递中函数的形式参数被声明为实参的一个引用。它们指向同一块内存地址并且从语言层面看它们就是同一个东西。在函数内部使用形参就像直接使用外部的实参一样无需任何解引用操作。void modify(int ref) { ref 100; // 直接修改就像操作原变量一样 } int main() { int a 10; modify(a); // 直接传递变量a本身 std::cout a std::endl; // 输出 100 return 0; }引用传递在语法上比地址传递更简洁避免了指针操作符*和的繁琐和可能出现的错误如空指针。但本质上它和地址传递达到的效果是类似的函数内部的操作直接影响外部实参。许多现代语言如C#的ref/out关键字也提供了类似引用的机制。注意这里常有一个误区有人认为Java或Python中的对象传递是“引用传递”。严格来说这并不是C意义上的引用传递。接下来我们会详细分析。3. 不同语言中的实现与表现理论说完了我们来看看在具体的编程语言中这些概念是如何落地和表现的。这是混淆的重灾区因为不同语言的设计哲学和术语定义有所不同。3.1 C/C概念的原生战场C和C是理解这些概念最直接的语言因为它们提供了对内存最底层的操作能力。C语言严格来说C语言只有值传递。即使是传递指针地址传递传递的也是“地址值”这个副本。但因为通过这个地址值可以访问到原始内存所以实现了修改外部数据的效果。C语言没有原生的“引用”语法。C语言同时支持值传递、地址传递通过指针和引用传递。这给了程序员极大的灵活性但也需要明确选择。值传递适用于内置基本类型和小型结构体或者当你明确不希望函数修改原数据时。地址传递当需要函数修改原数据或者传递大型结构体避免复制开销时使用。需要小心处理指针算术和空指针。引用传递在需要修改原数据或避免复制时比指针更安全、更推荐的方式。特别是使用const引用const T来传递大型对象只读访问是C中的最佳实践之一既能避免复制又能防止意外修改。// C 示例对比三种方式 struct BigData { int arr[10000]; }; void byValue(BigData data) {} // 值传递整个数组被复制开销大 void byPointer(BigData *data) {} // 地址传递传递指针无复制 void byReference(BigData data) {} // 引用传递传递引用无复制语法更干净 void byConstReference(const BigData data) {} // 常引用传递只读访问安全且高效3.2 Java著名的“按值传递对象引用”Java的传递规则是面试常考题也是容易让人晕乎的点。记住这个核心结论Java中永远是值传递。但对于对象类型这个“值”是对象引用的值你可以粗略理解为指针的值但Java中不叫指针。基本数据类型如int,double,char纯粹的值传递。函数内修改不影响外部。对象类型包括数组、String以及任何类的实例传递的是引用的副本。这个副本和原来的引用指向堆内存中的同一个对象。public class Test { public static void modifyObject(ListString list) { list.add(new element); // 操作1修改对象内容 - 生效 list new ArrayList(); // 操作2让形参引用指向新对象 - 不生效 list.add(another element); } public static void main(String[] args) { ListString myList new ArrayList(); myList.add(old element); modifyObject(myList); System.out.println(myList); // 输出[old element, new element] } }分析一下调用modifyObject(myList)时将myList这个引用它保存着指向堆中某个ArrayList对象的地址复制了一份传给形参list。现在myList和list这两个引用变量指向同一个对象。list.add(“new element”)通过list这个引用找到了堆里的那个对象并修改了它。因为myList也指向它所以外部能看到这个修改。list new ArrayList()这一步改变了形参list本身存储的地址值让它指向一个全新的对象。但这只是改变了副本的指向外部的myList这个引用依然坚定地指着原来的那个对象。所以后续对新对象的操作与myList无关。所以Java中对象参数的表现更像是“按共享传递”或“按对象引用值传递”。函数可以修改对象的内容但不能让外部的引用换一个对象去指。3.3 Python/JavaScript与Java类似但细节有差异Python和JavaScript等动态语言的行为与Java非常相似可以统一用“传递对象的引用”来理解。Python一切皆对象。数字、字符串、元组等不可变对象表现得像“值传递”因为你对它们操作如num 1实际上是创建了一个新对象让局部变量指向它不影响外部。而列表、字典等可变对象则表现得像“传递引用”函数内修改内容会影响外部。def modify_data(a, b): a 100 # a是整数不可变此操作创建了新整数100让局部变量a指向它 b.append(4) # b是列表可变此操作修改了b指向的列表对象本身 x 10 y [1, 2, 3] modify_data(x, y) print(x) # 输出 10未改变 print(y) # 输出 [1, 2, 3, 4]已改变JavaScript基本类型Number,String,Boolean,null,undefined,Symbol,BigInt是值传递。对象类型Object,Array,Function,Date等是传递引用的值。行为逻辑与Java几乎一致。function modify(obj, arr) { obj.value 100; // 修改对象属性生效 obj { value: 200 }; // 让形参指向新对象不生效 arr.push(4); // 修改数组内容生效 } let myObj { value: 10 }; let myArr [1, 2, 3]; modify(myObj, myArr); console.log(myObj.value); // 输出 100 console.log(myArr); // 输出 [1, 2, 3, 4]一个关键的心智模型对于Python/JavaScript/Java中的对象把变量想象成一个便利贴上面写着对象的“身份证号”内存地址。传递参数时是复印了一张便利贴给函数。两张便利贴写着相同的号码指向同一个对象。函数可以用它的便利贴去修改那个对象比如在房子里添家具。但如果函数把它的便利贴撕掉贴到一个新房子上你原来的便利贴依然指着老房子。4. 深度辨析与常见误区理解了各语言的表现后我们再来进行一些深度辨析澄清最常见的几个误区。4.1 值传递 vs. 地址传递本质都是“值”这是最根本的一点。从底层实现看地址传递是值传递的一个特例。它传递的“值”是一个内存地址。C语言中void func(int *p)你传递a实际上是把a的地址一个数值比如0x7ffeedcafe复制给了形参p。p得到了这个地址值因此能通过它找到a。如果函数内部执行了p b;这只是改变了形参p存储的地址值和外面的a无关这与Java中让引用指向新对象是同样的逻辑。所以地址传递并没有突破“复制一份值”的机制它只是利用复制的“值”地址具有间接访问能力实现了修改远处数据的效果。4.2 引用传递 vs. “传递引用”C与Java/Python的关键区别这是混淆的核心。很多人说“Java是引用传递”这是不严谨的。C的引用传递形参是实参的别名。在编译器的符号表里它们可能就是同一个条目。你无法让一个引用在初始化后去引用另一个对象。int r a;之后r一辈子就是a的别名对r的操作就是对a的操作不存在“让r指向另一个变量”这种操作。Java/Python的“传递引用”传递的是引用的值reference value。形参是一个独立的变量它保存着和实参相同的引用值指向同一个对象。你可以改变这个形参变量保存的值让它指向另一个对象但这不影响实参变量。简单说C的引用是“绑定”Java/Python的引用是“持有”。一个像是给房子起了个别名“老王家”另一个像是你手里有老王家钥匙的复制品。你可以用复制品打开门进去装修修改对象但你不能把复制品钥匙变成老李家的钥匙还指望原来的钥匙也变改变引用指向。4.3 可变对象 vs. 不可变对象行为差异的根源在Python、Java如String等语言中理解“可变”与“不可变”对象至关重要这直接决定了参数传递后可能产生的效果。不可变对象对象一旦创建其状态内容就不能被改变。如Python的int,str,tupleJava的String, 基本类型的包装类Integer等。对不可变对象的任何“修改”操作都会返回一个全新的对象。对传递的影响因为对象不可变函数内部无法修改其内容。任何看似修改的操作都只是让局部变量指向了一个新对象。因此无论传递机制如何外部都感知不到变化。这给人一种“值传递”的错觉。可变对象对象创建后其内容可以被修改。如Python的list,dict,setJava的ArrayList,HashMap以及任何自定义类的对象除非被设计为不可变。对传递的影响函数接收到对象的引用后可以修改对象内部的数据。由于内外引用指向同一对象所以修改对外部可见。这个区别解释了为什么在Python中传列表会改变传数字不会。根本原因不在于传递方式不同它们都是传递对象的引用而在于对象本身的特性。5. 实战应用与避坑指南理论最终要服务于实践。下面我们看看在真实编码中如何运用这些知识以及有哪些常见的“坑”。5.1 函数设计如何选择传递方式在不同的语言和场景下选择正确的参数传递方式关乎代码的效率和正确性。C输入参数只读小型数据内置类型、小结构体使用值传递。简单直接。大型数据大结构体、类对象使用const引用传递const T。避免复制开销同时保证不被修改。输出参数或输入输出参数需要修改使用非常量引用传递T。语法简洁是首选。也可以使用指针传递T*当参数可能为空可选参数或需要明确表达“可能修改”的意图时使用。调用时需要用取地址提供了额外的视觉提示。Java/Python/JavaScript你通常没有选择“传递方式”的语法语言已经决定了是“传递对象引用的值”。设计重点在于区分意图如果函数不应该修改传入的对象请在文档中明确说明或者在函数内部开始时进行防御性复制如new ArrayList(inputList)尤其是当对象被传递给不可信的代码时。如果函数需要修改传入的对象这是被允许的但最好也在函数名或文档中体现如processAndModify(list)。如果函数需要返回一个新的、修改后的状态而不影响原对象那么应该创建并返回一个新对象。函数式编程风格推崇这种做法因为它避免了副作用使代码更易于推理。5.2 经典陷阱与排查技巧陷阱一误以为在函数内“新建”可以替换外部对象现象在函数内部对形参对象引用进行赋值期望外部的实参也指向新对象。根源混淆了“修改引用指向的对象”和“修改对象本身”。赋值操作改变的是局部变量形参存储的引用值与实参无关。排查遇到“为什么我new了一个对象外面却没变”的问题立刻检查函数内部是否是对形参直接赋值而不是通过形参去操作其属性或元素。陷阱二对不可变对象的“修改”无效现象在函数内对字符串进行拼接、对整数进行运算外部不变。根源String、Integer、Python的int/str等是不可变对象。str “append”这样的操作是创建了一个新字符串对象并让局部变量指向它。解决如果需要结果必须将函数返回值赋给外部变量。例如在Python中s modify_string(s)其中modify_string返回新的字符串。陷阱三在循环或递归中误用可变默认参数Python特有现象一个函数的默认参数是空列表[]或空字典{}多次调用后发现默认参数竟然“记住”了上次的数据。def bad_append(item, my_list[]): my_list.append(item) return my_list print(bad_append(1)) # 输出 [1] print(bad_append(2)) # 输出 [1, 2] 预期是[2]根源默认参数在函数定义时就被求值并绑定到函数对象上而不是每次调用时。这个默认的[]是一个可变对象所有使用默认参数的调用实际上都在操作同一个列表对象。解决使用None作为默认值在函数内部进行判断和初始化。def good_append(item, my_listNone): if my_list is None: my_list [] my_list.append(item) return my_list陷阱四在多线程环境下共享可变对象现象将同一个可变对象如列表、字典传递给多个线程没有进行同步控制导致数据竞争和不一致。根源传递对象引用使得多个执行流可以同时访问和修改同一块数据。解决根据语言特性使用锁Lock、线程安全的数据结构或者传递数据的副本。在设计API时需要仔细考虑对象的所有权和线程安全性。5.3 调试技巧如何观察传递过程当对参数传递行为不确定时最直接的方法是打印内存地址或对象ID。Python使用id()函数。def test(obj): print(f”Inside func, id of obj: {id(obj)}”) obj.append(‘test’) print(f”After modify, id of obj: {id(obj)}”) # id不变说明是同一个对象 obj [‘new’] print(f”After reassign, id of obj: {id(obj)}”) # id变了说明指向了新对象 my_list [] print(f”Outside, id of my_list: {id(my_list)}”) test(my_list) print(f”Outside after call, id of my_list: {id(my_list)}”) # 依然是原来的id print(my_list) # 输出 [‘test’]Java虽然不能直接打印内存地址但可以打印对象的hashCode()默认实现通常与内存地址相关或者直接使用System.identityHashCode(obj)。C/C直接使用取地址操作符打印指针值。通过对比函数内外对象的ID或地址可以清晰地看到它们是否是同一个实体从而验证你的理解。6. 总结与高阶思考走过了概念辨析、语言对比和实战避坑我们应该对“值传递”、“地址传递”、“引用传递”有了更立体和深刻的认识。它们不是非此即彼的孤立概念而是一个从“完全隔离”到“共享访问”的频谱。值传递是光谱的一端提供最大的隔离性和安全性代价是可能的复制开销。地址传递通过指针是一种利用值传递机制实现的间接访问它强大但需要开发者手动管理间接层。C的引用传递在语法层面提供了指针的便利性同时增强了安全性不允许空引用初始化后不能重绑定。Java/Python/JavaScript的“传递对象引用”可以看作是语言抽象层对“地址传递”的一种封装和简化它隐藏了指针的复杂性但保留了共享访问对象的能力同时通过“引用值复制”的规则限制了直接更换外部引用的能力。理解这些最终是为了写出意图清晰、行为可预测的代码。当你设计一个函数时应该明确它的参数意图是作为纯输入、输出、还是输入输出对于输入参数如果对象很大考虑使用常量引用或不可变视图来避免复制如果需要修改是修改对象本身还是返回一个新对象把这些想清楚并在代码和文档中体现出来你的代码质量会大大提高。最后记住这个简单的原则在大多数现代高级语言中你可以认为“基本类型传的是值对象类型传的是‘引用’的副本”。但心里要明白这个‘引用’的副本让你可以修改对象内容却不能替换掉调用者手里的那个‘引用’本身。把握住“修改内容”和“更换引用”的区别很多疑惑就会迎刃而解。下次再遇到同事问起那个“诡异”的Bug你就可以从容地给他画一张内存图把便利贴和房子的故事讲清楚了。

相关新闻

打卡信奥刷题(3494)用C++实现信奥题 P10784 【MX-J1-T4】『FLA - III』Wrestle

打卡信奥刷题(3494)用C++实现信奥题 P10784 【MX-J1-T4】『FLA - III』Wrestle

P10784 【MX-J1-T4】『FLA - III』Wrestle 题目背景 原题链接:https://oier.team/problems/J1D。 在 2022 年末,疫情将西北某不知名知名学校的大多数学生关在家中上网课,安同学还不知道,他和语文老师的对决已然悄无声息地开始了…

2026/8/8 8:33:29 阅读更多 →
Day03-系统设计总览

Day03-系统设计总览

0、开篇:系统设计到底设计了什么?上一节我们提到了需求工程,它回答了"要做什么",本篇我们聊一聊系统设计,系统设计回答的其实是"怎么把它做出来"。很多同学一听到"系统设计"四个字&…

2026/8/8 8:32:28 阅读更多 →
基于ROS 2与Meta Quest 3的松灵机械臂VR遥操作实践指南

基于ROS 2与Meta Quest 3的松灵机械臂VR遥操作实践指南

这次我们来看一个将虚拟现实(VR)与机器人控制深度结合的开源项目:松灵七轴机械臂 Nero 的双臂遥操作。这个项目的核心亮点在于,它利用 Meta Quest 3 头显作为控制器,通过 ROS 2 Jazzy 框架,实现了对实体七轴…

2026/8/8 8:32:28 阅读更多 →

最新新闻

从零开始:Hunyuan3D-2本地AI 3D生成完全指南

从零开始:Hunyuan3D-2本地AI 3D生成完全指南

从零开始:Hunyuan3D-2本地AI 3D生成完全指南 【免费下载链接】Hunyuan3D-2 High-Resolution 3D Assets Generation with Large Scale Hunyuan3D Diffusion Models. 项目地址: https://gitcode.com/GitHub_Trending/hu/Hunyuan3D-2 你是否曾想过,只…

2026/8/8 17:05:04 阅读更多 →
如何用Nullboard在15分钟内打造你的极简数字工作空间?

如何用Nullboard在15分钟内打造你的极简数字工作空间?

如何用Nullboard在15分钟内打造你的极简数字工作空间? 【免费下载链接】nullboard Nullboard is a minimalist kanban board, focused on compactness and readability. 项目地址: https://gitcode.com/GitHub_Trending/nu/nullboard 你是否曾为繁复的项目管…

2026/8/8 17:05:04 阅读更多 →
从聊天到执行:AI交互范式变革与Agent实战指南

从聊天到执行:AI交互范式变革与Agent实战指南

1. 从“聊天”到“执行”:一次交互范式的静默革命 最近在社区里看到不少讨论,说OpenAI的新动作让“聊天”变得过时了。起初我也觉得这说法有点耸人听闻,毕竟ChatGPT的聊天界面已经成了AI的代名词。但仔细琢磨了最近的一系列更新,从…

2026/8/8 17:05:04 阅读更多 →
3个核心功能让Linux应用安装变得如此简单:星火应用商店深度解析

3个核心功能让Linux应用安装变得如此简单:星火应用商店深度解析

3个核心功能让Linux应用安装变得如此简单:星火应用商店深度解析 【免费下载链接】星火应用商店Spark-Store 星火应用商店是国内知名的linux应用分发平台,为中国linux桌面生态贡献力量 项目地址: https://gitcode.com/spark-store-project/spark-store …

2026/8/8 17:05:04 阅读更多 →
G-Helper启动故障解决方案:从诊断到维护的完整指南

G-Helper启动故障解决方案:从诊断到维护的完整指南

G-Helper启动故障解决方案:从诊断到维护的完整指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Exper…

2026/8/8 17:05:04 阅读更多 →
AutoHotInterception终极指南:掌握Windows设备级输入控制的完整解决方案

AutoHotInterception终极指南:掌握Windows设备级输入控制的完整解决方案

AutoHotInterception终极指南:掌握Windows设备级输入控制的完整解决方案 【免费下载链接】AutoHotInterception An AutoHotkey wrapper for the Interception driver 项目地址: https://gitcode.com/gh_mirrors/au/AutoHotInterception 在Windows自动化脚本开…

2026/8/8 17:04:03 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/8 17:02:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/8 17:02:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/8 17:02:44 阅读更多 →