我一直收到这个错误:在预期浮点值的地方使用指针值

时间:2016-01-15 04:54:44

标签: c function pointers return-value nested-function

我已经看到了一个关于它的问题,不止一个,但它并没有真正解决我的问题。代码更大,但问题在于这一部分。我有这个东西:

int globalx=12;  
int globaly=10;

void Function (int measurex, int measurey)
    float thingx()
            {
            (((globalx/2)-measurex)/(globalx/2));
            }
    float totalx=globalx/(float)thingx;
    float totaly=globaly/2;

并且它有一些错误返回该错误。顾名思义,globalx和globaly是两个全局变量。我在这做错了什么?我怎么能写一些能做我打算做的事呢?

3 个答案:

答案 0 :(得分:1)

关于代码的一些事情:

  • thingx替换为thingx()
  • Function定义应位于大括号{...}内。
  • thingx()定义之外定义Function(依赖于编译器,因为Nested functions are not allowed in standard C)。
  • return函数添加thingx()语句。
  • int measurex作为参数添加到thingx()函数。
  • Function中,在获取totalx和totaly的值后,你没有对它们做任何事情(也许你只是没有把这个函数的全部代码放在你的问题中)。

您的函数定义应如下所示:

float thingx(int measurex)
{
    return (((globalx/2)-measurex)/(globalx/2));
}

void Function (int measurex, int measurey) {
    float totalx=globalx/(float)thingx(measurex);  // <-- missing parentheses, should be thingx(...)
    float totaly=globaly/2;

    // You probably want to do something with totalx and totaly here...
}

主:

int globalx=12;  
int globaly=10;

Function(globalx, globaly);

另外,请记住,这会将结果截断为整数globaly/2,因为globaly定义为 int (您可以阅读有关整数除法的信息: What is the behavior of integer division?

答案 1 :(得分:0)

你的代码真的搞砸了。对于您的功能,您需要将所有代码放在大括号{}中。像这样......

void myFunction(int a, int b)
{
    //put your code in here
}

答案 2 :(得分:0)

您看到的错误,因为thingx()是一个函数,thingx基本上是一个函数指针,并且您正在尝试使用float进行划分函数指针。

首先,请允许我明确声明Nested functions are not standard C. They are supported as GCC extension.

话虽如此,在你的情况下,你需要

  1. thingx()函数定义移到Function()之外。

  2. 就像您对thingx()函数所做的那样,Function()的正文也应该在{...}内。

  3. 使用函数调用运算符()来调用函数。所以基本上你的陈述应该是

    float totalx=globalx/(float)thingx(measurex);
    

    ad函数定义应该看起来像

     float thingx(int measurex){..
    
  4. 在您的函数中添加return语句。根据{{​​1}}标准,章节§6.9.1

      

    如果到达了终止函数的C11,则使用函数调用的值   调用者,行为未定义。

    所以,函数体应该看起来像

    }