[]优先于*运算符

eat*_*hil 3 c undefined-behavior

我的代码中的某个地方我做的很糟糕.当我的extrema变量运行时,我会得到未定义的行为,但大部分时间它甚至都没有运行.任何帮助都会非常棒.

#include <stdio.h>

void get_extrema(int quadrant, int **extrema)
{
  if (quadrant == 1)
  {
    *(extrema)[0] = 0;
    *(extrema)[1] = 90;
  }
  else if (quadrant == 2)
  {
    *(extrema)[0] = -90;
    *(extrema)[1] = 0;
  }
}

void print(int* arr)
{
      printf("%i",arr[0]);
      printf(",");
      printf("%i\n",arr[1]);
}

int main(void)
{
    int *extrema = (int*)malloc(2*sizeof(int));
    get_extrema(1,&extrema);
    print(extrema);
    get_extrema(2,&extrema);
    print(extrema);
}
Run Code Online (Sandbox Code Playgroud)

我也尝试使用指针算法编辑极值数组,如下所示:

**(extrema) = 0;
**(extrema+1) = 90;
Run Code Online (Sandbox Code Playgroud)

但这也不起作用.我真的不知道哪里出错了,我真的可以使用一些帮助.

das*_*ght 8

您获得未定义行为的原因是下标运算符[]优先于间接运算符*.extrema索引的值被索引为指针数组,这是不正确的,因为那里只有一个指针.

由于您要将指针传递给指针,因此需要将星号放在括号内:

if (quadrant == 1)
{
    (*extrema)[0] = 0;
    (*extrema)[1] = 90;
}
else if (quadrant == 2)
{
    (*extrema)[0] = -90;
    (*extrema)[1] = 0;
}
Run Code Online (Sandbox Code Playgroud)

在ideone上演示.