当前位置: 首页 > 知识库问答 >
问题:

为什么我在尝试传递数组值时得到“不兼容的指针类型”?

鱼锦
2023-03-14

我在尝试从主函数中的点获取最小值/最大值时收到错误/警告。如何计算最大/最小点?有没有更简单的方法?我应该使用结构吗?

        
test.c:73:14: warning: incompatible pointer types passing 'int [100][100]' to
      parameter of type 'int *' [-Wincompatible-pointer-types]
      convexHull(points, n);

        test.c:33:21: note: passing argument to parameter 'point' here
        void convexHull(int point[], int n)
                    ^
        1 warning generated.**
void convexHull(int point[], int n)
{
  int i;
  //n is the size
  int min_x=0;
  int max_x=0;

  if (n <3)
  {
    printf("Convex hull can't have less than 3 points\n.");
  }

  //Finding point with min/max x-coordinate.
  for (i=1;i<n;i++)
  {
    if (point[i] < point[min_x])
    {
      min_x=i;
    }
    if (point[i] > point[max_x])
    {
      max_x = i;
    }
  }
  printf("%d\n",max_x);
  printf("%d\n",min_x);
}

int main()
{
  int n;
  int points[100][100] = {{0, 3}, {2, 2}, {1, 1}, {2, 1},
                  {3, 0}, {0, 0}, {3, 3}};

  n = sizeof(points)/sizeof(points[0]);
  convexHull(points, n);


  return 0;
}

共有1个答案

罗伟志
2023-03-14

数组被声明为二维数组

  int points[100][100] = {{0, 3}, {2, 2}, {1, 1}, {2, 1},
                  {3, 0}, {0, 0}, {3, 3}};

所以在表达式中用作函数参数时,它被隐式转换为指向其类型为int(*)[100]的第一个元素的指针。

但是相应的函数参数具有类型int*

void convexHull(int point[], int n)

因为编译器将声明为int*point[]的参数调整为声明int*point

并且没有从类型int(*)[100]到类型int*的隐式转换。

而且似乎这个宣言

  int points[100][100] = {{0, 3}, {2, 2}, {1, 1}, {2, 1},
                  {3, 0}, {0, 0}, {3, 3}};

没有意义,因为每个点只有twp元素,例如{0,3},但没有100个元素

您需要声明一个结构,例如

struct Point
{
    int x;
    int y;
};

并在程序中使用它。

在这种情况下,可以通过以下方式定义点阵列

  struct Point points[] = { {0, 3}, {2, 2}, {1, 1}, {2, 1},
                  {3, 0}, {0, 0}, {3, 3} };

因此,函数声明和定义应该相应地更改。

 类似资料:
  • 在这个类中,我想整体返回一个arraylist,而不是作为单个元素返回。然而,我在编译时遇到了一个错误,“不兼容类型”。我做错了什么?谢谢你的帮助!!

  • 这是类a的一个函数,我将我的值传递给一个类名,并确认它的寄存器函数。 这是课堂确认。在这门课上,我计划在服务器内部发布数据。url中没有错误。我已经打印了这个代码“System.out.println”(“wei”getPostDataString(postDataParams))我得到了我的价值。但系统显示为空指针。代码的其他部分有错误吗?

  • 本文向大家介绍为什么我们在C ++中通过引用传递指针?,包括了为什么我们在C ++中通过引用传递指针?的使用技巧和注意事项,需要的朋友参考一下 如果需要修改指针而不是指针指向的对象,则可以按引用传递指针。 这是如何通过引用传递指针的示例- 示例 输出结果

  • 问题内容: 上面的代码不会给出任何错误/警告。但是为什么相同的方法不适用于以下提到的代码? 我的问题是,由于int可以容纳所有字节值,为什么数组不是这种情况? 他们俩毕竟都持有住址。如果这对于ref变量是可行的,那将是 令人沮丧的 。 问题答案: 语言规范在Sec 4.10.3中 定义了数组类型之间的子类型化: 以下规则定义了数组类型之间的直接超类型关系: 如果和都是引用类型,则。 如果是原始类型

  • 我想为任何枚举对象创建通用方法,它将检查枚举是否具有指定的值名称,但作为类型对象,我无法使用方法。为什么? 有没有办法从类型对象中获取值? 我需要这样的方法来检查配置中的值是否是myEnum的有效字符串。valueOf(字符串) 因为如果给定的字符串错误,那么它将抛出一个异常(我不想要它)。 我希望我的方法如下所示: 但是没有方法,如何正确创建这个方法?