private void button8_Click(object sender, EventArgs e) { double[][] ptArr = new double[4][];//数组乃引用类型. for (int i = 0; i < 4; i++) { ptArr[i] = new double[3]; } ptArr[0][0] = 0; ptArr[0][1] = 1; ptArr[0][2] = 2; double[] d1 = new double[3]; d1 = ptArr[0]; //重新改变ptArr的值 ptArr[0][0] = 100; ptArr[0][1] = 200; ptArr[0][2] = 300; double[] d2 = new double[3]; d2 = ptArr[0]; String strRes1 = null; String strRes2 = null; String strTmp = null; for (int i = 0; i < 3; i++ ) { strTmp = Convert.ToString(d1[i]); strRes1 += strTmp; strRes1 += ','; } for (int i = 0; i < 3; i++) { strTmp = Convert.ToString(d2[i]); strRes2 += strTmp; strRes2 += ','; } MessageBox.Show(strRes1 + '/n' + strRes2); //结果居然显示d1和d2的值相等! //--> //因为数组是引用类型(详见图),所以上述代码中ptArr中的值的改变会影响到d1的值(d1 = ptArr[0]). //因此输出结果均为100, 200, 300 } } //如若想要得到正确的结果(即:d1和d2的值不相同),应该用下面的代码(使用数组的CopyTo()函数) double[][] ptArr = new double[4][]; for (int i = 0; i < 4; i++) { ptArr[i] = new double[3]; } ptArr[0][0] = 0; ptArr[0][1] = 1; ptArr[0][2] = 2; double[] d1 = new double[3]; //d1 = ptArr[0]; ptArr[0].CopyTo(d1, 0); //重新改变ptArr的值 ptArr[0][0] = 100; ptArr[0][1] = 200; ptArr[0][2] = 300; double[] d2 = new double[3]; //d2 = ptArr[0]; ptArr[0].CopyTo(d2, 0); String strRes1 = null; String strRes2 = null; String strTmp = null; for (int i = 0; i < 3; i++) { strTmp = Convert.ToString(d1[i]); strRes1 += strTmp; strRes1 += ','; } for (int i = 0; i < 3; i++) { strTmp = Convert.ToString(d2[i]); strRes2 += strTmp; strRes2 += ','; } MessageBox.Show(strRes1 + '/n' + strRes2);