gpt4 book ai didi

c - [] 优先于 * 运算符

转载 作者:行者123 更新时间:2023-11-30 16:38:12 26 4
gpt4 key购买 nike

在我的代码中的某个地方我做了一些非常糟糕的事情。当我的极值变量运行时,我会遇到未定义的行为,但大多数时候它甚至不运行。任何帮助都会非常好。

#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);
}

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

**(extrema) = 0;
**(extrema+1) = 90;

但这也不起作用。我真的不知道哪里出了问题,我真的需要一些帮助。

最佳答案

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

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

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

Demo on ideone.

关于c - [] 优先于 * 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47581725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com