我有这个功课。基本上,我要做的是完成以下代码,返回二维数组的最大元素' r'行和' n'列。
var typeName = $"MyNamespace.{playerCharacter}";
var type = Type.GetType(typeName);
var instance = Activator.CreateInstance(type);
我有一个警告:
控制台停止工作:问题导致程序无法正常工作......
答案 0 :(得分:1)
您的max_element函数定义如下:
int max_element(int **A, int r, int n);
它需要一个指向int(int**
)的指针,你就是这样的:
int A[2][3];
max_element(&A, 2, 3);
您希望表达式&A
产生int**
类型的结果吗?它不会。它实际上会产生类型int(*)[2][3]
的结果。这不会绑定到int**
。这是编译器警告开始的地方。那些是不兼容的指针!!
但是你有更广泛的问题。 2D数组不是int**
。它的类型为int[][COLS]
。您 必须 指定第二个数字。
将您的功能更改为:
const int COLS = 3;
int max_element(int A[][COLS], int r, int n);
然后调用:
max_element(A, 2, 3);
答案 1 :(得分:0)
从{<1}}更改函数原型:
max_element
要
int max_element(int **A, int r, int n)
这C-Faq彻底解释了原因。它的要点是数组一旦衰减成指针,它不会递归地发生。数组数组衰减为指向数组的指针,而不是指向指针的指针。
此外,您应该int max_element(int A[][3], int r, int n)
而不是max_element
致电max_element(A, 2, 3)
。
如果一个函数已被声明为接受指向指针的指针(如你的情况那样),那么将二维数组直接传递给它几乎肯定没有意义。尝试使用二维数组调用它时,必须使用max_element(&A, 2, 3)
:
intermediate pointer
但这种用法具有误导性,几乎肯定是错误的,因为数组已经int max_element(int **A, int r, int n);
int *ip = &A[0][0];
max_element(&ip, 2, 3); /* PROBABLY WRONG */
(flattened
)。