C#入门及进阶|数组和集合(四):数组的参数传递

数组的参数传递

        向方法传递参数有两个方法,一个是“传值”,另一个是“传引用”。

        传值时,如果对被调用的方法的值的副本进行修改,不会影响原始变量的值。

1.值传递

        通过“传值”方式来传递引用,相当于允许方法直接访问和修改调用者的原始数据。

       下面我们将通过一个实例(见后面代码)来演示:通过将变量myInt传递给方法SquareIt。方法内发生的任何更改对变量的原始值无任何影响。

        通过向Change方法传递引用类型的参数myArray。由于该参数是对myArray的引用,所以有可能更改数组元素的值。但试图将参数重新分配到不同的内存位置时,该操作仅在方法内有效,并不影响原始变量myArray。

2.引用传递

        如果希望通过传递一个值类型参数,在方法内对该参数的修改能够返回给原始参数,那又该怎么办呢?为了实现这样的编程,C#提供了关键字ref和out。

       ref和out关键字指出一个值类型变量或引用类型变量应该以传递引用方式传递。如果使用关键字ref和out通过引用传递变量,则方法能够修改变量本身。具体说,如果参数为对象变量,则在方法内可以给它分配新的对象。

        若要使用ref参数,必须将参数作为ref参数显式传递到方法。ref参数的值被传递到ref参数。传递到ref参数的参数必须最先初始化。

       若要使用out参数,必须将参数作为out参数显式传递到方法。out参数的值不会传递到out参数。不必初始化作为out参数传递的变量。然而,必须在方法返回之前为out参数赋值。out参数通常用于产生多个返回值的方法中。

//求平方void SquareIt(int x){x = x * x;}//修改数组的值,主函数中数组中的值发生改变void Change(int[] arr){arr[0] = 888;}//重新分配内存,主函数中值不变void Change0(int[] arr){arr = new int[] {888,999};}//传值,不能改变实参void change(string s)  {char[] cc = new char[] { 'a', 'b', 'c' };s = new string(cc);}//ref关键字的使用void change(ref string s)  {char[] cc = new char[] { 'x', 'y', 'z' };s = new string(cc);}//out关键字的使用void changeout(out string s)   {s = "hello";}private void button1_Click(object sender, EventArgs e){int myInt = 5;SquareIt(myInt);richTextBox1.AppendText(myInt.ToString()+"\n");int[] myArray = new int[2] {1,2};//值不变Change0(myArray);richTextBox1.AppendText(myArray[0].ToString() + "\n");//值发生改变Change(myArray);richTextBox1.AppendText(myArray[0].ToString() + "\n");//方法能够更改变量和它引用的对象的成员string str = "aaa";change(ref str);richTextBox1.AppendText(str + "\n");string str2;changeout(out str2);//方法不能更改变量,但可以更改它引用的对象的成员str = "aaa";change(str);richTextBox1.AppendText(str + "\n");string str2;changeout(out str2);//方法不能更改变量,但可以更改它引用的对象的成员 str = "aaa";change(str);richTextBox1.AppendText(str + "\n");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/679762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是Java中的微服务架构,你能列举一些微服务架构的优缺点吗?

什么是Java中的微服务架构,你能列举一些微服务架构的优缺点吗? 微服务架构是一种将单个应用程序拆分为多个小型服务的架构风格,每个服务都运行在自己的进程中,并通过轻量级的通信机制(通常是HTTP或者消息队列&#xf…

【DSP】数字信号处理发展里程碑(AI【文心一言】 辅助生成)

在远离尘嚣的学术殿堂中,数字信号处理(DSP)这一学科犹如一颗璀璨的明珠,其发展历程充满了传奇色彩。下面,就让我们一起穿越时空,回到那些激动人心的时刻,见证数字信号处理从无到有、从弱到强的壮…

java对象内部都有哪些东西

普通对象 对象头 markword 占8字节ClassPointer 指针 :-XX userCompressedClassPointrs 为4字节,不开启为 8字节实例数据 引用类型: -XX userCommpressedOops 为4字节,不开启8字节Padding对齐, 8的倍数 数组对象 对象头:markwor…

算法沉淀——位运算(leetcode真题剖析)

算法沉淀——位运算 常用位运算总结1.基础位运算2.确定一个数中第x位是0还是13.将一个数的第x位改成14.将一个数的第x位改成05.位图6.提取一个数最右边的17.删掉一个数最右边的18.异或运算9.基础例题 力扣题目讲解01.面试题 01.01. 判定字符是否唯一02.丢失的数字03.两整数之和…

【北邮鲁鹏老师计算机视觉课程笔记】05 Hough 霍夫变换

【北邮鲁鹏老师计算机视觉课程笔记】05 Hough 霍夫变换 1 投票策略 考虑到外点率太高 ①让直线上的每一点投票 ②希望噪声点不要给具体的任何模型投票,即噪声点不会有一致性的答案 ③即使被遮挡了,也能把直线找出来 参数空间离散化 直线相当于就是m,b两…

Python 3 中使用 pandas 和 Jupyter Notebook 进行数据分析和可视化

简介 Python 的 pandas 包用于数据操作和分析,旨在让您以直观的方式处理带标签或关联数据。 pandas 包提供了电子表格功能,但由于您正在使用 Python,因此它比传统的图形电子表格程序要快得多且更高效。 在本教程中,我们将介绍如…

git revert回退某次提交

请直接看原文: 【git revert】使用以及理解(详解)_git revert用法-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 前言 试验得知:用Reset HEAD方…

mmap函数的详细讲解

mmap&#xff08;&#xff09;函数是一个用于在用户空间和内核空间之间进行文件映射的系统调用。它允许文件在物理内存中的特定区域被映射到进程的地址空间中&#xff0c;从而允许进程通过内存访问操作来读取和写入文件。 函数原型&#xff1a; #include <sys/mman.h> …

笔记---dp---最长上升子序列模型

模型原始题目&#xff1a;AcWing.895.最长上升子序列 题目关系如下&#xff1a; 转化一 AcWing.1017.怪盗基德的滑翔翼 怪盗基德是一个充满传奇色彩的怪盗&#xff0c;专门以珠宝为目标的超级盗窃犯。 而他最为突出的地方&#xff0c;就是他每次都能逃脱中村警部的重重围堵…

ZigBee学习——在官方例程实现组网

✨Z-Stack版本&#xff1a;3.0.2 ✨IAR版本&#xff1a;10.10.1 ✨这篇博客是在善学坊BDB组网实验的基础上进行完善&#xff0c;并指出实现的过程中会出现的各种各样的问题&#xff01; 善学坊教程地址&#xff1a; ZigBee3.0 BDB组网实验 文章目录 一、基础工程选择二、可能遇…

Linux(Ubuntu) 环境搭建:MySQL

注&#xff1a;服务器默认以root用户登录 服务器的终端中输入以下指令&#xff1a; # 安装 MySQL apt install mysql-server # 查看版本 mysql -V # 查看 MySQL 服务状态 systemctl status mysql # 安装完成后&#xff0c;MySQL 服务将自动启动 # MySQL 服务在系统启动时自动…

spring 入门 一

文章目录 Spring简介Spring的优势Spring的体系结构 Spring快速入门Spring程序开发步骤导入Spring开发的基本包坐标编写Dao接口和实现创建Spring核心配置文件在Spring配置文件中配置UserDaoImpl使用Spring的API获得Bean实例 Spring配置文件Bean标签基本配置Bean标签范围配置Bean…

2.10

头文件&#xff1a; #include <sqlite3.h> 编译时候要加上-lsqlite3 gcc a.c -lsqlite3 1&#xff09;sqlite3_open 打开一个数据库&#xff0c;如果数据库不存在&#xff0c;则创建一个数据库 2&#xff09;sqlite3_close 关闭数据库&#xff0c;断开句柄所拥有的资…

HarmonyOS 横屏调试与真机横屏运行

我们有些程序 需要横屏才能执行出效果 我们在预览器上 点击如下图指向出 就进入一个横屏调试了 但 我们真机运行 依旧是竖着的 我们如下图 找到 module.json5 在 abilities 下面 第一个对象 最下面 加上 "orientation": "landscape"然后 我们再真机运…

Oracle表结构转成MySQL表结构

在将Oracle数据库表结构转换为MySQL数据库表结构时&#xff0c;需要考虑两大数据库系统之间的差异。以下是一些基本步骤和注意事项&#xff0c;帮助您进行转换&#xff1a;1、字符集和排序规则&#xff1a; Oracle使用的是固定的字符集和排序规则&#xff0c;而MySQL使用的是可…

Rust变量与常量介绍

Rust是一门注重安全性和性能的系统编程语言&#xff0c;其中变量和常量的概念有着独特的设计和特性。在本文中&#xff0c;我们将深入了解Rust中的变量和常量&#xff0c;并解释它们之间的区别&#xff0c;同时通过多个例子进行说明。 Rust常量 在Rust中&#xff0c;常量是不…

第三百二十一回

文章目录 1. 概念介绍2. 使用方法2.1 基本用法2.2 缓冲原理 3. 示例代码4. 内容总结 我们在上一章回中介绍了"FadeInImage组件"相关的内容&#xff0c;本章回中将介绍CachedNetworkImage组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…

搜索专项---最短路模型

文章目录 迷宫问题武士风度的牛抓住那头牛 一、迷宫问题OJ链接 本题思路:只需要记录各个点是有哪个点走过来的&#xff0c;就能递推得出路径。记录前驱假设从 1,1 这个点向下走到了2, 1&#xff0c;则将2,1这个点的前驱记为1,1。这样&#xff0c;将整张地图 bfs 后&#xff0c…

vue3学习——封装菜单栏

/Layout/Sidebar/index.vue <script setup lang"ts"> import Sidebar from ./Sidebar.vue // 在下面的代码里 import { useRoute } from vue-router import useUserStore from /store/modules/user.ts // state中存放菜单数据 import useLayoutSetting from /…

数据结构:并查集讲解

并查集 1.并查集原理2.并查集实现3.并查集应用4.并查集的路径压缩 1.并查集原理 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&#xff0c;然后按一定的规律将归于同一组元素的集合合并。在此过程中…