在矩阵中查找最大元素

时间:2016-10-30 20:43:23

标签: c

我有这个功课。基本上,我要做的是完成以下代码,返回二维数组的最大元素' r'行和' n'列。

var typeName = $"MyNamespace.{playerCharacter}";
var type = Type.GetType(typeName);
var instance = Activator.CreateInstance(type);

我有一个警告:

  • 传递' max_element'的参数1来自不兼容的指针类型[-Wincompatible-pointer-types]

控制台停止工作:问题导致程序无法正常工作......

2 个答案:

答案 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)。