IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> UNITY零基础学习 month 1 day13 -> 正文阅读

[游戏开发]UNITY零基础学习 month 1 day13

C#语言基础

数组

交错数组

可以看成不规则的表格
4个元素的交错数组
每一个元素都是新的一维数组,二维数组是特殊的交错数组,就好像正方形是特殊的长方形

//声明创建一个4个元素的交错数组
int[][] array = new int[4][];
//后面这个框不能直接填
//赋值
array[0] = new int[3];
array[1] = new int[5];
array[2] = new int[4];
array[3] = new int[1]; 
//将数组1赋值给交错数组的第一个元素的第一个元素
array[0][0] = 1;

参数数组

整数相加的方法
当类型确定 个数不确定的情形下,用数组来做

 private static int Add(int[] arr)
{
    int sum = 0;
    foreach(var item in arr)
    {
        sum += item;
    }
    return sum;
}

这里的参数用int[] ,在输入时需要输入整个数组,比较麻烦
我们就可以用params参数数组

static void Main(string[] args)
{
    int result01 = Add( 1, 34, 43, 54, 78 );
}

private static int Add(params int[] arr)
{
    int sum = 0;
    foreach(var item in arr)
    {
        sum += item;
    }
    return sum;
}

参数数组,对于方法内部而言:就是一个普通数组;对于方法外部(调用者)而言:可以传递数组、一组数据类型相同的变量集合、也可以不传递参数

作用:简化调用者调用方法的代码

数据类型

数据类型

类型分类

通用类型系统CTS是.NET框架中的一个组成部分,为所有面向.NET框架的语言定义了数据类型的规则

值类型:存储数据本身
引用类型:存储数据的引用(内存地址)

类型归属

类型归属

内存

  • 是CPU与其他外部存储器交换数据的桥梁
  • 用于存储正在执行的程序与数据,即数据必须加载到内存才能被CPU处理
  • 通常开发人员表达的“内存”都是指内存条

分配

程序运行时,CLR(公共语言运行池)将申请的内存空间从逻辑上进行划分
栈区:
- 空间小(1MB),读取速度很快
- 用于存储正在执行的方法,分配的空间叫做栈帧。栈帧中存储方法的参数以及变量等数据。方法执行完毕后,对应的栈帧将被清除
堆区:
- 空间大,读取速度慢
- 用于存储引用类型的数据

局部变量

定义在方法内部的变量(参数也属于)
特点:

  • 没有默认值,必须自行设定初始值,否则不能使用
  • 方法被调用时,存在栈中,方法调用结束时从栈中清除

值类型与引用类型

  • 值类型:声明在栈中,数据存储在栈中
  • 引用类型:声明在栈中,数据存储在堆中,栈中存储该数据的引用

方法执行在栈中,所以在方法中声明的变量都在栈中
可以把变量名认为是内存地址的别名,仅有名字含义
变量
变量在内存中都是一块空间,并且有其地址,变量名只是方便程序员操作这块空间
因为值类型直接存储数据,所以a的数据存储在栈中
因为引用类型存储数据在堆里,所以在栈中存储的是堆中数据的地址

int a = 1;
int b = a;
a = 2;
Console.WriteLine(b);

int[] arr = new int[] { 1 };
int[] arr2 = arr;
arr[0] = 2;
Console.WriteLine(arr2[0]);

这里的b的值是1,而arr2[0]的值是2。因为b复制的是a的数据,而arr2复制的是arr里的地址,代码改变了数据的值后,b并没有变,而arr2对应的数据变化了
堆栈
堆栈扩展
在这里插入图片描述
如果是object,跟string等引用类型一致

问题:

static void Main()
{
	int c = 1;
	int[] arr = new int[]{1};
	Fun1(c,arr);
	Console.WriteLine(c);
	Console.WriteLine(arr[0]);
}
private static void Fun1(int c,int[] arr)
{
	c = 2;
	arr[0] = 2;
}

输出结果是多少?为什么?
调用方法类似于赋值,
Fun1(b,arr);//实参将数据1、数组引用赋值给形参

如果fun1中是arr = new int[]{2},则是开辟了新的空间,指向了新的在堆中的地址

int num01 = 1, num02 = 1;
bool r1 = num01 == num02;//?true 因为值类型存储的是数据,所以比较的是数据

int[] arr01 = new int[] { 1 }, arr02 = new int[] { 1 };
bool r2 = arr01 == arr02;//?false 因为引用类型存储的是数据的引用
bool r3 = arr01[0] == arr02[0];//?true

值类型与引用类型的应用

值参数:按值传递–传递实参变量存储的内容
作用:传递信息

引用参数:按引用传递–传递实参变量自身的内存地址
private static void Fun2(ref int a)
方法内部修改引用参数,实质上就是在修改实参变量
作用:改变数据

输出参数:按引用传递–传递实参变量本身的内存地址
private static void Fun3(out int a)
作用:返回结果,可以返回多个结果,原本的方法中只有return才能返回一个结果

区别:

  1. 输出参数方法内部必须为输出参数赋值,引用参数则不用
  2. 在传递参数的时候,输出参数可以不赋值,引用参数需要赋值(正常传递参数都要赋值)

练习

练习一:定义 两个整数交换的方法

练习二:根据矩形的长、宽求面积和周长

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-10-22 11:15:14  更:2021-10-22 11:17:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 0:37:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码