数组
声明、实例化、初始化和访问;
数组的基本操作和排序;
System.Array类
C#的指针和不安全代码
int[] A;
A = new int[3];//简单的一维数组
数组必须先声明:
类型名称[] 数组名;
数组在声明后必须实例化才能使用:
数组名称 = new 类型名称[数组长度];
int[] A = new int[3];
类型名称[] 数组名称 = new 类型名称[数组长度];
实例化时,可以为数组元素指定初始化值
int[] A = new int[3] {1,3,5};
数组名称 = new 类型名称[数组长度] {初始值设定项};
int[] A = new int[] {1,3,5};
int[] A = {1,3,5};
int[] A; A = {1,3,5};
int[] A = new int[3];
A[0] = 1;
A[1] = 3;
A[2] = 5;
int[] A = new int[3];//一维数组
int[,] A = new int[4, 2];//二维数组
int[, ,] A = new int[3, 5, 2];//三维数组
…….
int[,…,] A = new int[3, 5, … , 2];//n维数组
int[] mark= new int[100]; //声明有100个整数的数组
Random rNum = new Random(); //生成随机数
int i,sumMark=0,avgMark,overAvg=0;
for (i = 0; i < 100; i++)
{
mark[i] = rNum.Next(101); //随机生成学生成绩(0~100)
sumMark += mark[i]; //统计成绩总和
}
avgMark = sumMark / 100; //求平均成绩
for (i = 0; i < 100; i++) //统计高于平均成绩的学生人数
{
if (mark[i] > avgMark) overAvg++;
}
for (i = 0; i < 100; i++)
{
if (mark[i] > avgMark) overAvg++;
}
foreach (int mm in mark)
{
if (mm> avgMark) overAvg++;
}
元素为数组的数组,元素的维度和大小可以不同
正交数组、变长数组、锯齿形数组
int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];
int[][,] jaggedArray = new int[3][];
{
new int[,] = {{1,3},{5,7}};
new int[,] = {{0,2},{4,6},{8,10}};
new int[,] = {{11,22},{99,88},{0,9}};
}
int N = A.Length; //获取数组A的长度N
for (int loop = 0; loop <= N - 2; loop++)//外循环进行N-1轮比较
{
MinI = loop;
for (i = loop; i <= N - 1; i++) //内循环中在无序数中找最小值
if (A[i] < A[MinI]) MinI = i;
//最小值与无序数中的第一个元素交换
t = A[loop];
A[loop]=A[MinI];
A[MinI] = t;
}
System.Array类提供的常用方法和属性如表5-4所示
为了保持类型安全,默认情况下,C# 不支持指针
C#通过使用 unsafe 关键字,可以定义不安全上下文,然后在不安全上下文中使用指针
在 C# 中,为了编译不安全代码,必须用/unsafe 编译应用程序
type* identifier;
void* identifier; // 允许但不推荐使用!
