Never save something for a special occasion. Every day in your life is a special occasion.
分类: C/C++
2011-01-24 21:01:43
参数传递问题 Magic-数组型参数
Magic方阵的定义:各行和=各列和=对角线和 的int方阵。
例如:
6 1 8
7 5 3
2 9 4
是3*3魔方阵。
7 2 6
1 5 9
4 8 3
不是魔方阵
请写一个函数,判断一个3*3的int数组是否魔方数组。
Code:
学习:
1、C语言只有一维数组,数组的元素可以是任意类型——包括数组。
例如 int array[2][3] 是一个“二维数组”,实际上是一个有2个元素的一维数组,数组的元素是有3个int的“一维数组”,元素的类型是 int [3]。
2、函数参数列表中的数组已经转化为指向其元素类型的指针。
这里 “bool IsMagic(int m[3][3])” 中的 int m[3][3] 等价于 int (*m)[3]。所以函数中允许这样的句子“m++”,这表示 指向数组的下一个元素m[0+1][*] (元素类型 int [3])。而 sizeof(m)也不是测量数组的大小,而是指针的大小,值为4.
另外,“bool IsMagic(int m[3][3])” 可以写成 “bool IsMagic(int m[][3])” 也是同样的原因。
提问:
这里是“判断一个3*3的int数组是否魔方阵”,如果是“判断 n*n(n<5)的int数组是否魔方阵”又该如何定义函数?具体描述:
有3个数组,规模分别是3*3,4*4,5*5,请写一个函数分别判断它们是否魔方阵。
提示:
不能把接口定义为 “bool IsMagic(int m[][])”因为编译器可以不知道“数组”的大小,但不能不知道它的内存布局。