在C99中的除法中使用指针,错误:无效操作数为二进制数

这个问题肯定看起来很愚蠢,但我总是浪费很多时间,用testerrors直到它工作,这种问题。

我需要一个指针从一个函数中返回一个值,然后我需要除以这个值,但我有编译器错误。

invalid operands to binary / (have 'int *' and 'int')

在下面的代码中,我试着用”& “来表示

void test(int *x, int y)
{
    *x = *x+y;
}

int main()
{
    int *x = 20;
    int y = 1;

    test(&x, y);

    printf("x: %i", x);

    float res = x / 2; // error: invalid operands to binary / (have 'int *' and 'int')

    //float res = *x / 2; // application crash with this one. (GCC native Android)
}

我试着用”&”,但没有用(x = 0),我试着用 “cast “转为 “int”,但只得到指针地址,等等。

解决方案:

你眼前的问题是,你已经声明了 x 作为指向int的指针,但你是想把它作为一个int来使用。 要简单地纠正最后一行,取消引用指针(就像你已经在 test()):

float res = *x / 2;

现在,看来你真的试过了,并得到了一个错误,这并不奇怪,因为你已经初始化了. . x 糟糕的是。

int *x = 20;

这并不能创造一个20的int值,并使x指向它。它将x设置为指向 内存地址 用整数值20表示。这可能是保留的内存,这就是为什么当你试图取消引用它时,你会得到一个错误。

(你不会在 test() 因为你已经把地址传给了 x 作为论据。 所以,在那里dereferencing它实际上确实能让你得到20–大概是这样)。)

为了让指针发挥作用,可以这样做。

int x = 20;
...
test(&x, y)
...
float res = x / 2;

或者:

int *x = malloc(sizeof(int));
*x = 20;
...
test(x, y)
..
float res = *x /2;

但你真的把这变得太难了。由于你只需要从函数中输出一个值,只要让函数返回那个值就可以了。那么你就完全没有必要去搞指针了。

int test(x,y) { return x+y; }
...
int x = 20;
...
x = test(x,y);
...
float res = x / 2;

(最后,我相信在任何情况下,你都希望使用) 2.0 在最后一行,不只是 2如果你想得到一个float的结果,而不是一个int的结果。)

给TA打赏
共{{data.count}}人
人已打赏
未分类

有什么方法可以用scandir循环文件夹?我面临一个问题,当循环使用

2022-9-13 14:40:22

未分类

在反应表中添加手动道具,禁用内部排序和过滤。

2022-9-13 14:40:24

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索