三分之十的菜鸟C#学习小记(七) 数组和params

C#数组

int[] array;

    int[] tmpArrayA = { 1, 2, 3, 4 };
    //在栈区分配空间
    
    int[] tmpArrayB = new int[3];
    //在堆区 分配了 3个连续的int 4字节空间

    int[] tmpArrayC = new int[3] { 1, 2, 3 };
    //在堆区分配空间,并初始化

    int[] tmpArrayD = new int[] { 1, 2, 3 };
    //在堆区分配空间

然后tmpArray指的就是数组的首元素地址(和c++一样喽)
拷贝数组:

//方法一,直接地址相等
            byte[] tmpArrayF = new byte[] { 3, 5, 8, 9 };
            byte[] tmpArrayG = new byte[4];
            tmpArrayG = tmpArrayF;
//方法二、数值相等
//遍历数组,逐位拷贝

二维数组

(定长数组)

int[,] tmpArrayA = new int[2,3];
int[,] tmpArrayB = new int[,]{{1,2},{4,3}};	//直接初始化
int[,] tmpArrayC = int[,] {{1,2},{3,4}};	//栈区

C# 中二维数组的概念不同于 C/C++、java 等语言中的二维数组,C# 中的二维数组更像是一个矩阵:访问时int val = tmpArrayA[2,3];

交错数组

交错数组是数组的数组。是一维数组。

int[,] tempA = new int[2, 3];   //定长数组、内存空间连续

 //交错数组、内存空间不连续
//定义方法一、
int[][] tempB = new int[2][] { new int[] { 2, 3 }, new int[] { 4, 5, 6, 7 } };   //变长数组
//定义方法二、
int[][] tempC = new int[][] { new int[] { 2, 3 }, new int[] { 4, 5, 6, 7 } };
//定义方法三、 栈区
int[][] tempD = { new int[] { 2, 3 }, new int[] { 4, 5, 6, 7 } };   

访问时int val = tempB[2][3];更像C++的二维数组

函数参数数组:params

params在声明方法时参数类型或者个数不确定时使用
注意:
一.参数数组必须是一维数组

二.不允许将params修饰符与ref和out修饰符组合起来使用

三.与参数数组对应的实参可以是同一类型的数组名,也可以是任意多个与该数组的元素属于同一类型的变量

四.若实参是数组则按引用传递,若实参是变量或表达式则按值传递

五.形式为:public 返回类型 方法名称( params 类型名称[] 数组名称 )

六.params参数必须是参数表的最后一个参数

static void AddFive(params String[] str)    //参数params表示要传递多个string参数
{
    Console.WriteLine("AddSix Success!");
}

//调用时1.
AddFive("aa", "bb", "cc");
//2.
string[] str = new string[] { "aa", "bb", "cc","dd" };
AddFive(str);

如果要实现多种类型,可以使用object
如果前面是特定类型参数,后面是params也可以(但是不能倒过来)

static void main()
   {
        UsrParam("123",1);
   }
 
public void UsrParam(params Object[] objlist)
   {
        Console.WriteLine(objlist[0]);
        Console.WriteLine(objlist[1]);
   }

public void UsrParam(double x , params Object[] objlist)
   {
            Console.WriteLine(x);
            Console.WriteLine(objlist[0]);
            Console.WriteLine(objlist[1]);
   }

我们通常的入口函数 static void Main(string [] args) 就是用数组来作形参的,它实际可以写成 static void Main(),不需要参数的传入。

同样使用数组作为形参,调用普通方法函数时,有无params是有区别的:
1.带params关键字的数组形参,既可以接受数组(数组名),也可以接受多个和形参同类型的值(不是数组形式):
如有方法 public int test (params int [] array), int [] a=new int [2] 作为数组时可以 test(a) 来调用,也可以 test(1,2,3,4) 来调用
2.不带params关键字的数组形参,如方法public int test (int [] array),不通过传值的方式调用,只能传数组的方式调用。

Array类:用于处理数组

Array 类是 C# 中所有数组的基类,它是在 System 命名空间中定义。Array 类提供了各种用于数组的属性和方法。
在这里插入图片描述
主要方法

int[] array_ListB = { 12, 15, 13, 0, 9, 4, 8, 11 }; //定义一个一维数组
Position = Array.IndexOf(array_ListB, 9);  //找到第一次出现 9 的下标
Array.Sort(array_ListB);				//从小到大排序
Array.Reverse(array_ListB);				//数组逆置
Array.Clear(array_ListB, 1, 2); //将下标1 长度范围为2 的所有元素 设为初始值(15,13)

注意属性和方法的区别哈:比如Length和GetLength
Length是属性,调用时是实例.属性,如tmpArrayA.Length
GetLength是方法,调用时Array.方法,如tmpArrayA.GetLength();
其他的方法要看清楚用法,到底是 数组名.方法 还是Array.方法(数组名)

Length和GetLength的输出:
假如一个数组:(两行三列)
array=
1,2,3
4,5,6

array.Length是6;
array.GetLength(0)是2,【GetLength(0)表示取行数】
array.GetLength(1)是3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值