C#_值类型与引用类型 及 值参数与引用参数

本文探讨了值类型和引用类型在内存中的表示,涉及栈帧、符号表和地址偏移量的概念。同时解析了值参数与引用参数的区别,以及在函数调用中的行为,特别强调了`ref`修饰符的作用。
摘要由CSDN通过智能技术生成

值类型与引用类型

栈帧和对象内部都维护着符号表,依变量的标识符查询符号表可知地址偏移量

对于成员变量而言,可得相对于所属对象地址的地址偏移量
对于局部变量而言,可得相对于帧指针所指地址的地址偏移量(关于栈指针和帧指针:栈指针指向栈的顶部,帧指针指向该函数对应的帧的底部)
基于此:
对于值类型而言,依地址偏移量找到的数据即为实际数据
对于引用类型而言,依地址偏移量找到的数据为实际数据在堆中的地址

值参数与引用参数

值参数和引用参数的区别在于传参时是否会创建参数副本:值参数不会创建副本,而引用参数会创建副本

换言之,值类型参数的参数与实体之间无直接关联,修改参数不会对实体产生影响;引用类型参数的参数与实体可视为同一参数,修改参数会将修改同步至实体。

注:当函数并不修改参数引用,而只是修改被引用的对象时,值参数引用类型引用参数引用类型在使用上并无区别,只是机制不同

使用方式:形参与实参用 ref 修饰

int num = 100;
public void Calculate(ref int x, int y)
{
    x++;
    Console.WriteLine(x + y);
}
Calculate(ref num, 50);
Console.WriteLine("num=" + num);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值