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

c#和c++区别

1.在 C# 中,参数传递方式有三种:值传递引用传递

a. 值传递(Pass by Value)
概念
将参数的副本传递给方法。
方法内对参数的修改不影响原始值。
适用场景
基本数据类型(如int、float、bool)。
不可变类型(如string)。
小型结构体(如DateTime、Point)。

void ChangeValue(int num) {num = 100;  // 修改副本,不影响原始值
}int original = 50;
ChangeValue(original);
Console.WriteLine(original);  // 输出: 50

b. 引用传递(Pass by Reference)
概念
使用ref关键字,将参数的内存地址传递给方法。
方法内对参数的修改直接影响原始值。
适用场景
需要在方法内修改调用者的变量。
避免大型对象的复制开销。

void Swap(ref int a, ref int b) {int temp = a;a = b;b = temp;  // 直接修改原始变量
}int x = 10, y = 20;
Swap(ref x, ref y);
Console.WriteLine($"x={x}, y={y}");  // 输出: x=20, y=10

类传递是 引用类型的传递
引用类型(如class、interface、delegate)默认按引用传递值。
方法内可修改对象的属性,但无法修改引用本身(除非用ref)。

class Person {public string Name { get; set; }
}void ChangeName(Person p) {p.Name = "Alice";  // 修改对象属性,影响原始对象
}void ChangeReference(Person p) {p = new Person { Name = "Bob" };  // 修改引用本身,不影响原始引用
}Person person = new Person { Name = "Charlie" };
ChangeName(person);
Console.WriteLine(person.Name);  // 输出: AliceChangeReference(person);
Console.WriteLine(person.Name);  // 输出: Alice(引用未变)

重点关注

void ChangeReference(Person p) {p = new Person { Name = "Bob" };  // 修改引用本身,不影响原始引用
}

这里明显可以看到c#的引用创建的副本 c++引用是别名
C# 引用类型的参数传递机制
在 C# 中,引用类型默认按值传递引用,这意味着:
当你传递一个引用类型(如 Person 对象)时,传递的是引用的副本(即内存地址的复制)。
方法内部有两个独立的引用变量:原始引用和副本。
修改副本引用(如 p = new Person())只会影响副本,不会改变原始引用

c# 引用类型的内存模型
在 C# 中,引用类型的对象存储在堆(Heap)上,而引用变量(如 Person person)存储在栈(Stack)或堆上(取决于变量的作用域)。
关键区别:
引用变量:存储对象的内存地址(通常是 4 字节或 8 字节,取决于系统是 32 位还是 64 位)。
对象本身:存储在堆上,可能占用大量内存(如大型数组、复杂对象图)。

C++引用的特性
无副本:引用不占用额外内存,只是原始对象的别名。
必须初始化:引用必须在创建时绑定到对象,且不能重新绑定。

相关文章:

  • uni-app项目实战笔记4--使用组件具名插槽slot定义公共标题模块
  • 偷懒一下下
  • Logic Error: 如何识别和修复逻辑错误
  • [MSPM0开发]之七 MSPM0G3507 UART串口收发、printf重定向,解析自定义协议等
  • day54 python对抗生成网络
  • 【Linux仓库】进程状态【进程·叁】
  • 数据结构——第二章 线性表之顺序表、单链表
  • navicat可视化页面直接修改数据库密码——mysql、postgresql、mangodb等
  • 华为云Flexus+DeepSeek征文 | 当大模型遇见边缘计算:Flexus赋能低延迟AI Agent
  • 2.3 ASPICE的架构与设计
  • 松胜与奥佳华按摩椅:普惠科技与医疗级体验的碰撞
  • 【Vue PDF】Vue PDF 组件初始不加载 pdfUrl 问题分析与修复
  • Mac电脑 系统监测工具 System Dashboard Pro
  • 在mac上安装sh脚本文件
  • Unity编辑器-获取Projectwindow中拖拽内容的路径
  • 科技新底座揭幕!2025 MWC上海锚定AI+、5G融合、双区创新三大引擎
  • 人工智能时代汽车营销如何创新突破?云徙科技汽车营销智能体助力车企立足数智化转型
  • 从流量到变现:知识IP商业化的底层逻辑|创客匠人解析
  • Nginx 负载均衡、高可用及动静分离
  • RabbitMQ配置镜像
  • 唐山做网站的电话/播放量自助下单平台
  • 网站建设多少钱/百度关键词排名靠前
  • 公司网站建设工作通知/2345网址导航大全
  • 户外俱乐部网站模板/最新国际消息
  • 商城网站建设哪家公司好/黑马培训机构
  • 魔域永恒网页游戏/seo优化方向